1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use std::rc::Rc;

use uuid::Uuid;

use crate::element::DmElement;

#[derive(Clone, Debug)]
pub struct Vector2 {
    pub x: f32,
    pub y: f32,
}

#[derive(Clone, Debug)]
pub struct Vector3 {
    pub x: f32,
    pub y: f32,
    pub z: f32,
}

#[derive(Clone, Debug)]
pub struct Vector4 {
    pub x: f32,
    pub y: f32,
    pub z: f32,
    pub w: f32,
}

#[derive(Clone, Debug)]
pub struct Color {
    pub r: u8,
    pub g: u8,
    pub b: u8,
    pub a: u8,
}

#[derive(Clone, Debug)]
pub enum Attribute {
    Unknown,
    Element(Rc<DmElement>),
    Int(i32),
    Float(f32),
    Bool(bool),
    String(String),
    Void(Vec<u8>),
    ObjectId(Uuid),
    Color(Color),
    Vector2(Vector2),
    Vector3(Vector3),
    Vector4(Vector4),
    QAngle(Vector3),
    Quaternion(Vector4),
    Matrix([f32; 16]),
    ElementArray(Vec<Rc<DmElement>>),
    IntArray(Vec<i32>),
    FloatArray(Vec<f32>),
    BoolArray(Vec<bool>),
    StringArray(Vec<String>),
    VoidArray(Vec<Vec<u8>>),
    ObjectIdArray(Vec<Uuid>),
    ColorArray(Vec<Color>),
    Vector2Array(Vec<Vector2>),
    Vector3Array(Vec<Vector3>),
    Vector4Array(Vec<Vector4>),
    QAngleArray(Vec<Vector3>),
    QuaternionArray(Vec<Vector4>),
    MatrixArray(Vec<[f32; 16]>),
}