Skip to main content

fre_rs/types/
mod.rs

1//! 
2//! Abstractions over ActionScript objects for integration with its type system.
3//! 
4
5mod classes;
6mod object;
7mod primitive;
8
9pub use {
10    classes::*,
11    object::*,
12    primitive::*,
13};
14
15use super::*;
16
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq)]
19pub enum Type {
20    Object,
21    Number,
22    String,
23    ByteArray,
24    Array,
25    Vector,
26    BitmapData,
27    Boolean,
28    Null,
29    Named(&'static str),
30    Context3D,
31    Error,
32    Unexpected(FREObjectType),
33}
34impl Type {
35    pub fn is_null(self) -> bool {self == Self::Null}
36}
37impl From<FREObjectType> for Type {
38    fn from(value: FREObjectType) -> Self {
39        match value {
40            FREObjectType::FRE_TYPE_OBJECT      => Self::Object,
41            FREObjectType::FRE_TYPE_NUMBER      => Self::Number,
42            FREObjectType::FRE_TYPE_STRING      => Self::String,
43            FREObjectType::FRE_TYPE_BYTEARRAY   => Self::ByteArray,
44            FREObjectType::FRE_TYPE_ARRAY       => Self::Array,
45            FREObjectType::FRE_TYPE_VECTOR      => Self::Vector,
46            FREObjectType::FRE_TYPE_BITMAPDATA  => Self::BitmapData,
47            FREObjectType::FRE_TYPE_BOOLEAN     => Self::Boolean,
48            FREObjectType::FRE_TYPE_NULL        => Self::Null,
49            _ => Self::Unexpected(value),
50        }
51    }
52}
53impl Display for Type {
54    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
55        match *self {
56            Self::Named(name) => write!(f, "{name}"),
57            Self::Unexpected(ty) => write!(f, "Unexpected FREObjectType. ({ty:#08X})"),
58            _ => write!(f, "{self:?}"),
59        }
60    }
61}