use crate::actor::{Actorful, Slot, Type}; use crate::number::Number; pub struct System { pub screen_buffer: Vec, } impl Actorful for System { fn inputs() -> Vec { let nonnegative_int = Type::NumberInRange { min: Some(Number::from(0)), max: None, }; let screen_position_type = Type::Record { name: "Screen Position".to_string(), fields: vec![ Slot { name: "X".to_string(), r#type: nonnegative_int.clone() }, Slot { name: "Y".to_string(), r#type: nonnegative_int }, ], }; vec![Slot { name: "mouse_position".to_string(), r#type: screen_position_type }] } fn outputs() -> Vec { let u24 = Type::NumberInRange { min: Some(Number::from(0)), max: Some(Number::from(1 << 24 - 1)), }; vec![Slot { name: "screen_buffer".to_string(), r#type: Type::List { contents: Box::new(u24) }}] } }