1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
use crate::actor::{Actorful, Slot, Type};
use crate::number::Number;
pub struct System {
pub screen_buffer: Vec<u32>,
}
impl Actorful for System {
fn inputs() -> Vec<Slot> {
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<Slot> {
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) }}]
}
}
|