wasm-bridge 0.1.0

Run WASM modules on desktop or on the web using wasmtime's API
Documentation
use wasm_bindgen::convert::ReturnWasmAbi;
use wasm_bindgen::JsValue;

use crate::*;

pub trait IntoImportResults {
    type Results: ReturnWasmAbi;

    fn into_import_results(self) -> Self::Results;
}

impl IntoImportResults for () {
    type Results = ();

    fn into_import_results(self) -> Self::Results {
        self
    }
}

macro_rules! impl_into_import_results_single {
    ($ty:ty) => {
        impl IntoImportResults for $ty {
            type Results = Self;

            fn into_import_results(self) -> Self::Results {
                self
            }
        }

        impl IntoImportResults for ($ty,) {
            type Results = $ty;

            fn into_import_results(self) -> Self::Results {
                self.0
            }
        }
    };
}

impl_into_import_results_single!(i32);
impl_into_import_results_single!(i64);
impl_into_import_results_single!(u32);
impl_into_import_results_single!(u64);
impl_into_import_results_single!(f32);
impl_into_import_results_single!(f64);

macro_rules! impl_into_import_results_many {
    ($wrapper: ident, $(($index: tt, $name: ident)),*) => {
        impl<$($name: Into<JsValue>),*> IntoImportResults for ($($name),*) {
            type Results = $wrapper<$($name),*>;

            fn into_import_results(self) -> Self::Results {
                $wrapper($(self.$index),*)
            }
        }
    };
}

#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper2,  (0, T0), (1, T1));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper3,  (0, T0), (1, T1), (2, T2));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper4,  (0, T0), (1, T1), (2, T2), (3, T3));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper5,  (0, T0), (1, T1), (2, T2), (3, T3), (4, T4));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper6,  (0, T0), (1, T1), (2, T2), (3, T3), (4, T4), (5, T5));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper7,  (0, T0), (1, T1), (2, T2), (3, T3), (4, T4), (5, T5), (6, T6));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper8,  (0, T0), (1, T1), (2, T2), (3, T3), (4, T4), (5, T5), (6, T6), (7, T7));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper9,  (0, T0), (1, T1), (2, T2), (3, T3), (4, T4), (5, T5), (6, T6), (7, T7), (8, T8));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper10, (0, T0), (1, T1), (2, T2), (3, T3), (4, T4), (5, T5), (6, T6), (7, T7), (8, T8), (9, T9));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper11, (0, T0), (1, T1), (2, T2), (3, T3), (4, T4), (5, T5), (6, T6), (7, T7), (8, T8), (9, T9), (10, T10));
#[rustfmt::skip]
impl_into_import_results_many!(TupleWrapper12, (0, T0), (1, T1), (2, T2), (3, T3), (4, T4), (5, T5), (6, T6), (7, T7), (8, T8), (9, T9), (10, T10), (11, T11));