xshade_parser/ast/
type_identifier.rs1use ast::*;
2
3#[derive(Debug, Eq, PartialEq, Serialize, Deserialize)]
4pub enum TypeIdentifier {
5 Single(SingleTypeIdentifier), Tuple(TupleTypeIdentifier), NamedTuple(NamedTupleTypeIdentifier), }
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}