main - The `wasm-bindgen` Guide

# `main`

When attached to the `main` function this attribute will adjust it to properly throw errors if they can be.

    #[wasm_bindgen(main)]
    fn main() -> Result<(), JsValue> {
        Err(JsValue::from("this error message will be thrown"))
    }

The attribute also allows using `async fn main()` in Cargo binaries.

    #[wasm_bindgen(main)]
    async fn main() {
        // ...
        future.await;
    }

This attribute is only intended to be used on the `main` function of binaries or examples. Unlike `#[wasm_bindgen(start)]`, it will not cause an arbitrary function to be executed on start in a library.

The return type support is modeled after `Termination`. `()` and `Infallible` are supported, but `Termination` itself is not. In order, wasm-bindgen will first detect a `Result<(), impl Into<JsValue>>` and will throw proper `JsValue`s, `Result<(), impl Debug>` will convert an error to a string and throw that.