kodept_core/structure/rlt/
file.rs

1use derive_more::Constructor;
2
3use crate::code_point::CodePoint;
4use crate::structure::Located;
5use crate::structure::rlt::new_types::*;
6use crate::structure::rlt::top_level::TopLevelNode;
7
8#[derive(Debug, Clone, PartialEq)]
9pub enum Module {
10    Global {
11        keyword: Keyword,
12        id: TypeName,
13        flow: Symbol,
14        rest: Box<[TopLevelNode]>,
15    },
16    Ordinary {
17        keyword: Keyword,
18        id: TypeName,
19        lbrace: Symbol,
20        rest: Box<[TopLevelNode]>,
21        rbrace: Symbol,
22    },
23}
24
25#[derive(Debug, Clone, PartialEq, Constructor)]
26pub struct File(pub Box<[Module]>);
27
28#[derive(Debug, Clone, PartialEq)]
29pub struct RLT(pub File);
30
31impl Module {
32    pub fn get_keyword(&self) -> &Keyword {
33        match self {
34            Module::Global { keyword, .. } => keyword,
35            Module::Ordinary { keyword, .. } => keyword,
36        }
37    }
38}
39
40impl Located for Module {
41    fn location(&self) -> CodePoint {
42        self.get_keyword().location()
43    }
44}
45
46impl Located for File {
47    fn location(&self) -> CodePoint {
48        CodePoint::new(0, 0)
49    }
50}