xshade_parser/ast/
type_identifier.rs

1use ast::*;
2
3#[derive(Debug, Eq, PartialEq, Serialize, Deserialize)]
4pub enum TypeIdentifier {
5    Single(SingleTypeIdentifier), // A<T>
6    Tuple(TupleTypeIdentifier), // (A<T>, B)
7    NamedTuple(NamedTupleTypeIdentifier), // (a: A<T>, b: B)
8}
9
10impl TypeIdentifier {
11    pub fn void(span: Span) -> TypeIdentifier {
12        TypeIdentifier::Tuple(TupleTypeIdentifier {
13            span,
14            member: vec![],
15        })
16    }
17}
18
19impl Spanned for TypeIdentifier {
20    fn get_span(&self) -> Span {
21        match self {
22            TypeIdentifier::Single(value) => value.span,
23            TypeIdentifier::Tuple(value) => value.span,
24            TypeIdentifier::NamedTuple(value) => value.span,
25        }
26    }
27}
28
29#[derive(Debug, Eq, PartialEq, Serialize, Deserialize)]
30pub struct SingleTypeIdentifier {
31    pub span: Span,
32    pub name: String,
33    pub arguments: Vec<TypeIdentifier>,
34}
35
36#[derive(Debug, Eq, PartialEq, Serialize, Deserialize)]
37pub struct TupleTypeIdentifier {
38    pub span: Span,
39    pub member: Vec<TypeIdentifier>,
40}
41
42#[derive(Debug, Eq, PartialEq, Serialize, Deserialize)]
43pub struct NamedTupleTypeIdentifier {
44    pub span: Span,
45    pub member: Vec<NamedTupleTypeMember>,
46}
47
48#[derive(Debug, Eq, PartialEq, Serialize, Deserialize)]
49pub struct NamedTupleTypeMember {
50    pub span: Span,
51    pub name: String,
52    pub type_identifier: TypeIdentifier,
53}