aboutsummaryrefslogtreecommitdiff
path: root/src/system.rs
blob: 7df8af8bffe0d9945787ced23f080b70f76cb972 (plain)
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) }}]
    }
}