1use super::*;
2
3#[derive(Debug, PartialEq, Clone)]
4pub enum Type {
5 Void,
6 Bool,
7 Char,
8 I8,
9 U8,
10 I16,
11 U16,
12 I32,
13 U32,
14 I64,
15 U64,
16 F32,
17 F64,
18 ISize,
19 USize,
20 String,
21 Object,
22 AttributeEnum, Name(TypeName),
24 Array(Box<Self>), ArrayRef(Box<Self>), ConstRef(Box<Self>), Generic(u16), PtrMut(Box<Self>, usize), PtrConst(Box<Self>, usize), ArrayFixed(Box<Self>, usize), }
33
34impl Type {
35 pub fn named(namespace: &str, name: &str) -> Self {
36 Self::Name(TypeName::named(namespace, name))
37 }
38
39 pub fn code(&self) -> u8 {
40 match self {
41 Self::Bool => ELEMENT_TYPE_BOOLEAN,
42 Self::U8 => ELEMENT_TYPE_U1,
43 Self::I8 => ELEMENT_TYPE_I1,
44 Self::U16 => ELEMENT_TYPE_U2,
45 Self::I16 => ELEMENT_TYPE_I2,
46 Self::U32 => ELEMENT_TYPE_U4,
47 Self::I32 => ELEMENT_TYPE_I4,
48 Self::U64 => ELEMENT_TYPE_U8,
49 Self::I64 => ELEMENT_TYPE_I8,
50 Self::F32 => ELEMENT_TYPE_R4,
51 Self::F64 => ELEMENT_TYPE_R8,
52 Self::String => ELEMENT_TYPE_STRING,
53 Self::AttributeEnum => 0x55,
54 rest => panic!("{rest:?}"),
55 }
56 }
57}