aboutsummaryrefslogtreecommitdiff
path: root/macros/src/syntax/mod.rs
blob: 53c17a82d4aad3555ea2c2bdceef3f5130a181a6 (plain) (blame)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use std::collections::{HashMap, HashSet};

use syn::Ident;
use quote::Tokens;

pub mod parse;

#[derive(Debug)]
pub struct App {
    pub device: Tokens,
    pub idle: Idle,
    pub init: Init,
    pub resources: Resources,
    pub tasks: Tasks,
}

#[derive(Debug)]
pub struct Init {
    pub path: Tokens,
}

#[derive(Debug)]
pub struct Idle {
    pub local: Resources,
    pub path: Tokens,
    pub resources: HashSet<Ident>,
}

#[derive(Debug)]
pub struct Task {
    pub kind: Kind,
    pub priority: u8,
    pub resources: HashSet<Ident>,
}

#[derive(Debug)]
pub enum Kind {
    Exception,
    Interrupt { enabled: bool },
}

// $ident: $ty = $expr;
#[derive(Debug)]
pub struct Resource {
    pub expr: Tokens,
    pub ty: Tokens,
}

pub type Resources = HashMap<Ident, Resource>;

pub type Tasks = HashMap<Ident, Task>;