ferrum_compiler/ir/rust/syntax/
use.rs1use super::*;
2
3#[derive(Debug, Clone, PartialEq)]
4pub struct RustIRUse {
5 pub use_mod: Option<RustIRUseMod>,
6 pub path: RustIRUseStaticPath,
7}
8
9#[derive(Debug, Clone, PartialEq)]
10pub enum RustIRUseMod {
11 Pub,
12}
13
14#[derive(Debug, Clone, PartialEq)]
15pub struct RustIRUseStaticPath {
16 pub pre: Option<RustIRUseStaticPathPre>,
17 pub name: Arc<str>,
18 pub next: Option<RustIRUseStaticPathNext>,
19}
20
21#[derive(Debug, Clone, PartialEq)]
22pub enum RustIRUseStaticPathPre {
23 DoubleColon,
24 CurrentDir,
25 RootDir,
26}
27
28#[derive(Debug, Clone, PartialEq)]
29pub enum RustIRUseStaticPathNext {
30 Single(RustIRUseStaticPathNextSingle),
31 Many(RustIRUseStaticPathNextMany),
32}
33
34#[derive(Debug, Clone, PartialEq)]
35pub struct RustIRUseStaticPathNextSingle {
36 pub path: Box<RustIRUseStaticPath>,
37}
38
39#[derive(Debug, Clone, PartialEq)]
40pub struct RustIRUseStaticPathNextMany {
41 pub nexts: Vec<RustIRUseStaticPathNextManyItem>,
42}
43
44#[derive(Debug, Clone, PartialEq)]
45pub struct RustIRUseStaticPathNextManyItem {
46 pub path: RustIRUseStaticPath,
47}
48
49pub trait RustIRUseVisitor<R = ()> {
51 fn visit_use(&mut self, use_decl: &mut RustIRUse) -> R;
52}
53
54pub trait RustIRUseAccept<R, V: RustIRUseVisitor<R>> {
55 fn accept(&mut self, visitor: &mut V) -> R;
56}
57
58impl<R, V: RustIRUseVisitor<R>> RustIRUseAccept<R, V> for RustIRUse {
59 fn accept(&mut self, visitor: &mut V) -> R {
60 return visitor.visit_use(self);
61 }
62}