p5-sys 0.1.1

bindings to p5.js
Documentation
pub struct Color {
    pub red: u8,
    pub green: u8,
    pub blue: u8,
    pub alpha: u8,
}

impl Color {
    pub const TRANSPARENT: Self = Color {
        red: 0,
        green: 0,
        blue: 0,
        alpha: 0,
    };
}
macro_rules! from {
    ($ident:pat = $ty:ty => $self_:ty $block:block) => {
        impl From<$ty> for $self_ {
            fn from($ident: $ty) -> Self {
                $block
            }
        }
    };
}

from!((red, green, blue) = (u8, u8, u8) => Color {
    Color { red, green ,blue , alpha: 255 }
});

from!((red, green, blue, alpha) = (u8, u8, u8, u8) => Color {
    Color { red, green ,blue , alpha }
});

from!(grey = u8 => Color {
    Color { red: grey, green: grey, blue: grey, alpha: grey }
});

from!((grey, alpha) = (u8, u8) => Color {
    Color { red: grey, green: grey, blue: grey, alpha }
});

pub fn background(color: impl Into<Color>) {
    let c = color.into();
    bindings::background(c.red, c.green, c.blue, c.alpha);
}

mod bindings {
    use wasm_bindgen::prelude::*;
    #[wasm_bindgen]
    extern "C" {
        pub fn background(r: u8, g: u8, b: u8, a: u8);
    }
}