wagen 0.3.0

A library to help generate WebAssembly
Documentation
use crate::*;

pub trait Expr<'a> {
    fn expr(self, builder: &mut Builder<'a>);
}

impl<'a, F: FnOnce(&mut Builder<'a>)> Expr<'a> for F {
    fn expr(self, builder: &mut Builder<'a>) {
        self(builder)
    }
}

impl<'a> Expr<'a> for Vec<Instr<'a>> {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.extend(self);
    }
}

impl<'a, const N: usize> Expr<'a> for [Instr<'a>; N] {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.extend(self);
    }
}

impl<'a> Expr<'a> for &[Instr<'a>] {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.extend(self.to_vec());
    }
}

impl<'a> Expr<'a> for Instr<'a> {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.push([self]);
    }
}

impl<'a> Expr<'a> for Builder<'a> {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.extend(self.instrs);
    }
}

impl<'a> Expr<'a> for bool {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.push(Instr::I32Const(self as i32));
    }
}

impl<'a> Expr<'a> for i32 {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.push(Instr::I32Const(self));
    }
}

impl<'a> Expr<'a> for i64 {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.push(Instr::I64Const(self));
    }
}

impl<'a> Expr<'a> for f32 {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.push(Instr::F32Const(self));
    }
}

impl<'a> Expr<'a> for f64 {
    fn expr(self, builder: &mut Builder<'a>) {
        builder.push(Instr::F64Const(self));
    }
}