rainbow_pest/ast/
mod.rs

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}