Constants
tigregalis opened this issue · 1 comments
tigregalis commented
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
tigregalis commented
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)
}
}