From 28a8fb462fa88da300c6cf016ed3c70c402b8dba Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Sun, 7 Mar 2021 06:32:15 -0700 Subject: add a good-enough-for-now system actor type --- src/system.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/system.rs (limited to 'src/system.rs') diff --git a/src/system.rs b/src/system.rs new file mode 100644 index 0000000..7df8af8 --- /dev/null +++ b/src/system.rs @@ -0,0 +1,31 @@ +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) }}] + } +} -- cgit v1.2.3