galvan_ast/item/
ident.rs

1use derive_more::{Display, From};
2
3use crate::{AstNode, Span};
4
5#[derive(Clone, Debug, PartialEq, Eq, Hash, Display, From)]
6pub struct Ident(String);
7
8impl Ident {
9    pub fn new(name: impl Into<String>) -> Ident {
10        Ident(name.into())
11    }
12
13    pub fn as_str(&self) -> &str {
14        &self.0
15    }
16}
17
18impl AstNode for Ident {
19    fn span(&self) -> Span {
20        // TODO  Save a meaningful span in this struct
21        Span::default()
22    }
23
24    fn print(&self, indent: usize) -> String {
25        format!("{}{}", " ".repeat(indent), self.0)
26    }
27}
28
29#[derive(Clone, Debug, PartialEq, Eq, Hash, Display)]
30pub struct TypeIdent(String);
31
32impl TypeIdent {
33    pub fn new(name: impl Into<String>) -> TypeIdent {
34        let name: String = name.into();
35        TypeIdent(name.trim().to_owned())
36    }
37
38    pub fn as_str(&self) -> &str {
39        &self.0
40    }
41
42    pub fn is_intrinsic(&self) -> bool {
43        self.0.starts_with("__")
44    }
45}
46
47impl From<TypeIdent> for String {
48    fn from(value: TypeIdent) -> Self {
49        value.0
50    }
51}
52
53impl AstNode for TypeIdent {
54    fn span(&self) -> Span {
55        // TODO  Save a meaningful span in this struct
56        Span::default()
57
58    }
59
60    fn print(&self, _indent: usize) -> String {
61        self.0.clone()
62    }
63}
64
65impl AsRef<str> for TypeIdent {
66    fn as_ref(&self) -> &str {
67        self.as_str()
68    }
69}