kodept_core/structure/rlt/
file.rs1use 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}