1use std::collections::HashMap;
2
3use hex_color::HexColor;
4
5mod object;
6mod value;
7
8#[derive(Clone, Debug, Eq, PartialEq)]
9pub struct ASTProgram {
10 pub statements: Vec<ASTStatement>,
11}
12
13#[derive(Clone, Debug, Eq, PartialEq)]
14pub enum ASTStatement {
15 Import(ImportStatement),
16 Schema(SchemaStatement),
17 Meta(MetaStatement),
18 Language(LanguageStatement),
19}
20
21#[derive(Clone, Debug, Eq, PartialEq)]
22pub struct ImportStatement {}
23
24#[derive(Clone, Debug, Eq, PartialEq)]
25pub struct SchemaStatement {
26 pub schema: String,
27 pub object: RangedObject,
28}
29
30#[derive(Clone, Debug, Eq, PartialEq)]
31pub struct MetaStatement {
32 pub meta: String,
33 pub object: RangedObject,
34}
35
36#[derive(Clone, Debug, Eq, PartialEq)]
37pub struct LanguageStatement {
38 pub language: String,
39 pub inherit: Vec<String>,
40 pub attributes: RangedObject,
41}
42
43#[derive(Clone, Debug, Eq, PartialEq)]
44pub struct RangedObject {
45 pub inherit: Vec<String>,
46 pub inner: HashMap<String, RangedValue>,
47}
48
49#[derive(Clone, Debug, Eq, PartialEq)]
50pub struct KvPair {
51 pub key: String,
52 pub value: RangedValue,
53}
54
55#[derive(Clone, Debug, Eq, PartialEq)]
56pub enum RangedValue {
57 Null,
58 String(String),
59 Number(String),
60 Boolean(bool),
61 Color(HexColor),
62 Array(Vec<RangedValue>),
63 Namespace(Vec<String>),
64 Object(RangedObject),
65}