1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#![forbid(rust_2018_idioms, future_incompatible, elided_lifetimes_in_paths)]
#![warn(
    missing_debug_implementations,
    trivial_casts,
    trivial_numeric_casts,
    unreachable_pub,
    unused_extern_crates,
    unused_import_braces,
    unused_qualifications,
    variant_size_differences
)]

use std::env;
use wasihost::wasi_snapshot_preview1::{DefaultWasiFdInitializer, WasiHost};

fn main() {
    let wasm_filename = env::args().skip(1).next().unwrap();

    let arguments = env::args().skip(1);
    let environment = env::vars().map(|(key, value)| format!("{}={}", key, value));

    let wasi_host = WasiHost::<String>::new(arguments, environment, DefaultWasiFdInitializer);

    let code = wasi_host
        .run_file(&wasm_filename)
        .expect("Unable to run WASM binary");

    eprintln!("WASI program exited with exit code {}.", code);
}