tigregalis / wittier

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Constants

tigregalis opened this issue · comments

Reference: https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md

WIT has no concept of constants

function

so that would probably have to map to a function
e.g. something like

constant_blue()

host impl is just

fn constant_blue() -> Color { BLUE }

enum

or to enum

enum Color {
  Blue
}

i thought about that but it might be more challenging to auto generate
you have to find all the constants of the same type within the same module I suppose
then group those

in macroquad:

pub mod colors {
    //! Constants for some common colors.

    use super::Color;

    pub const LIGHTGRAY: Color = Color::new(0.78, 0.78, 0.78, 1.00);
    pub const GRAY: Color = Color::new(0.51, 0.51, 0.51, 1.00);
    pub const DARKGRAY: Color = Color::new(0.31, 0.31, 0.31, 1.00);
    pub const YELLOW: Color = Color::new(0.99, 0.98, 0.00, 1.00);
    pub const GOLD: Color = Color::new(1.00, 0.80, 0.00, 1.00);
    pub const ORANGE: Color = Color::new(1.00, 0.63, 0.00, 1.00);
    pub const PINK: Color = Color::new(1.00, 0.43, 0.76, 1.00);
    pub const RED: Color = Color::new(0.90, 0.16, 0.22, 1.00);
    pub const MAROON: Color = Color::new(0.75, 0.13, 0.22, 1.00);
    pub const GREEN: Color = Color::new(0.00, 0.89, 0.19, 1.00);
    pub const LIME: Color = Color::new(0.00, 0.62, 0.18, 1.00);
    pub const DARKGREEN: Color = Color::new(0.00, 0.46, 0.17, 1.00);
    pub const SKYBLUE: Color = Color::new(0.40, 0.75, 1.00, 1.00);
    pub const BLUE: Color = Color::new(0.00, 0.47, 0.95, 1.00);
    pub const DARKBLUE: Color = Color::new(0.00, 0.32, 0.67, 1.00);
    pub const PURPLE: Color = Color::new(0.78, 0.48, 1.00, 1.00);
    pub const VIOLET: Color = Color::new(0.53, 0.24, 0.75, 1.00);
    pub const DARKPURPLE: Color = Color::new(0.44, 0.12, 0.49, 1.00);
    pub const BEIGE: Color = Color::new(0.83, 0.69, 0.51, 1.00);
    pub const BROWN: Color = Color::new(0.50, 0.42, 0.31, 1.00);
    pub const DARKBROWN: Color = Color::new(0.30, 0.25, 0.18, 1.00);
    pub const WHITE: Color = Color::new(1.00, 1.00, 1.00, 1.00);
    pub const BLACK: Color = Color::new(0.00, 0.00, 0.00, 1.00);
    pub const BLANK: Color = Color::new(0.00, 0.00, 0.00, 0.00);
    pub const MAGENTA: Color = Color::new(1.00, 0.00, 1.00, 1.00);
}

enum example:

// wit
    enum color { // if this is generated from `macroquad::color::colors` this would actually be `colors`
      light-gray, // if this is generated from `macroquad::color::colors::LIGHTGRAY` this would actually be `lightgray`
      gray,
      dark-gray,
      yellow,
      gold,
      orange,
      pink,
      red,
      maroon,
      green,
      lime,
      dark-green,
      sky-blue,
      blue,
      dark-blue,
      purple,
      violet,
      dark-purple,
      beige,
      brown,
      dark-brown,
      white,
      black,
      blank,
      magenta,   
    }
// host implementation in Rust
impl From<levo::portal::my_imports::Color> for macroquad::prelude::Color {
    fn from(value: levo::portal::my_imports::Color) -> Self {
        match value {
            levo::portal::my_imports::Color::LightGray => macroquad::color::colors::LIGHTGRAY,
            levo::portal::my_imports::Color::Gray => macroquad::color::colors::GRAY,
            levo::portal::my_imports::Color::DarkGray => macroquad::color::colors::DARKGRAY,
            levo::portal::my_imports::Color::Yellow => macroquad::color::colors::YELLOW,
            levo::portal::my_imports::Color::Gold => macroquad::color::colors::GOLD,
            levo::portal::my_imports::Color::Orange => macroquad::color::colors::ORANGE,
            levo::portal::my_imports::Color::Pink => macroquad::color::colors::PINK,
            levo::portal::my_imports::Color::Red => macroquad::color::colors::RED,
            levo::portal::my_imports::Color::Maroon => macroquad::color::colors::MAROON,
            levo::portal::my_imports::Color::Green => macroquad::color::colors::GREEN,
            levo::portal::my_imports::Color::Lime => macroquad::color::colors::LIME,
            levo::portal::my_imports::Color::DarkGreen => macroquad::color::colors::DARKGREEN,
            levo::portal::my_imports::Color::SkyBlue => macroquad::color::colors::SKYBLUE,
            levo::portal::my_imports::Color::Blue => macroquad::color::colors::BLUE,
            levo::portal::my_imports::Color::DarkBlue => macroquad::color::colors::DARKBLUE,
            levo::portal::my_imports::Color::Purple => macroquad::color::colors::PURPLE,
            levo::portal::my_imports::Color::Violet => macroquad::color::colors::VIOLET,
            levo::portal::my_imports::Color::DarkPurple => macroquad::color::colors::DARKPURPLE,
            levo::portal::my_imports::Color::Beige => macroquad::color::colors::BEIGE,
            levo::portal::my_imports::Color::Brown => macroquad::color::colors::BROWN,
            levo::portal::my_imports::Color::DarkBrown => macroquad::color::colors::DARKBROWN,
            levo::portal::my_imports::Color::White => macroquad::color::colors::WHITE,
            levo::portal::my_imports::Color::Black => macroquad::color::colors::BLACK,
            levo::portal::my_imports::Color::Blank => macroquad::color::colors::BLANK,
            levo::portal::my_imports::Color::Magenta => macroquad::color::colors::MAGENTA,
        }
    }
}

impl Host for MyCtx {
    fn draw_line(
        &mut self,
        start_x: f32,
        start_y: f32,
        end_x: f32,
        end_y: f32,
        thickness: f32,
        color: my_imports::Color,
    ) -> wasmtime::Result<()> {
        let color = color.into();
        let out = macroquad::shapes::draw_line(start_x, start_y, end_x, end_y, thickness, color);
        Ok(out)
    }
}