Skip to main content

fre_rs/types/
primitive.rs

1use super::*;
2
3
4#[allow(non_camel_case_types)]
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6#[repr(transparent)]
7pub struct int <'a> (NonNullFREObject, PhantomData<&'a()>);
8impl<'a> int<'a> {
9    #[allow(unused_variables)]
10    pub fn new (ctx: &CurrentContext<'a>, value: i32) -> Self {
11        let mut obj = std::ptr::null_mut();
12        let r = unsafe {FRENewObjectFromInt32(value, &mut obj)};
13        debug_assert!(r.is_ok());
14        assert!(!obj.is_null());
15        unsafe {transmute(obj)}
16    }
17    fn value(self) -> i32 {
18        let mut val = i32::default();
19        let r = unsafe {FREGetObjectAsInt32(self.as_ptr(), &mut val)};
20        debug_assert!(r.is_ok());
21        val
22    }
23}
24unsafe impl<'a> AsObject<'a> for int<'a> {const TYPE: Type = Type::Named("int");}
25impl From<int<'_>> for FREObject {fn from(value: int) -> Self {value.as_ptr()}}
26impl<'a> From<int<'a>> for Object<'a> {fn from(value: int<'a>) -> Self {value.as_object()}}
27impl Display for int<'_> {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {Display::fmt(&(self.value()), f)}}
28
29
30#[allow(non_camel_case_types)]
31#[derive(Debug, Clone, Copy, PartialEq, Eq)]
32#[repr(transparent)]
33pub struct uint <'a> (NonNullFREObject, PhantomData<&'a()>);
34impl<'a> uint<'a> {
35    #[allow(unused_variables)]
36    pub fn new (ctx: &CurrentContext<'a>, value: u32) -> Self {
37        let mut obj = std::ptr::null_mut();
38        let r = unsafe {FRENewObjectFromUint32(value, &mut obj)};
39        debug_assert!(r.is_ok());
40        assert!(!obj.is_null());
41        unsafe {transmute(obj)}
42    }
43    pub fn value (self) -> u32 {
44        let mut val = u32::default();
45        let r = unsafe {FREGetObjectAsUint32(self.as_ptr(), &mut val)};
46        debug_assert!(r.is_ok());
47        val
48    }
49}
50unsafe impl<'a> AsObject<'a> for uint<'a> {const TYPE: Type = Type::Named("uint");}
51impl From<uint<'_>> for FREObject {fn from(value: uint) -> Self {value.as_ptr()}}
52impl<'a> From<uint<'a>> for Object<'a> {fn from(value: uint<'a>) -> Self {value.as_object()}}
53impl Display for uint<'_> {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {Display::fmt(&(self.value()), f)}}
54
55
56#[derive(Debug, Clone, Copy, PartialEq, Eq)]
57#[repr(transparent)]
58pub struct Number <'a> (NonNullFREObject, PhantomData<&'a()>);
59impl<'a> Number<'a> {
60    #[allow(unused_variables)]
61    pub fn new (ctx: &CurrentContext<'a>, value: f64) -> Self {
62        let mut obj = std::ptr::null_mut();
63        let r = unsafe {FRENewObjectFromDouble(value, &mut obj)};
64        debug_assert!(r.is_ok());
65        assert!(!obj.is_null());
66        unsafe {transmute(obj)}
67    }
68    pub fn value (self) -> f64 {
69        let mut val = f64::default();
70        let r = unsafe {FREGetObjectAsDouble(self.as_ptr(), &mut val)};
71        debug_assert!(r.is_ok());
72        val
73    }
74}
75unsafe impl<'a> AsObject<'a> for Number<'a> {const TYPE: Type = Type::Number;}
76unsafe impl<'a> TryAs<'a, Number<'a>> for Object<'a> {}
77impl From<Number<'_>> for FREObject {fn from(value: Number) -> Self {value.as_ptr()}}
78impl<'a> From<Number<'a>> for Object<'a> {fn from(value: Number<'a>) -> Self {value.as_object()}}
79impl<'a> TryFrom<Object<'a>> for Number<'a> {type Error = Type; fn try_from (value: Object<'a>) -> Result<Self, Type> {value.try_as()}}
80impl Display for Number<'_> {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {Display::fmt(&self.as_object(), f)}}
81
82
83#[derive(Debug, Clone, Copy, PartialEq, Eq)]
84#[repr(transparent)]
85pub struct Boolean <'a> (NonNullFREObject, PhantomData<&'a()>);
86impl<'a> Boolean<'a> {
87    #[allow(unused_variables)]
88    pub fn new (ctx: &CurrentContext<'a>, value: bool) -> Self {
89        let value = if value {1} else {0};
90        let mut obj = std::ptr::null_mut();
91        let r = unsafe {FRENewObjectFromBool(value, &mut obj)};
92        debug_assert!(r.is_ok());
93        assert!(!obj.is_null());
94        unsafe {transmute(obj)}
95    }
96    pub fn value (self) -> bool {
97        let mut val = u32::default();
98        let r = unsafe {FREGetObjectAsBool(self.as_ptr(), &mut val)};
99        debug_assert!(r.is_ok());
100        val != 0
101    }
102}
103unsafe impl<'a> AsObject<'a> for Boolean<'a> {const TYPE: Type = Type::Boolean;}
104unsafe impl<'a> TryAs<'a, Boolean<'a>> for Object<'a> {}
105impl From<Boolean<'_>> for FREObject {fn from(value: Boolean) -> Self {value.as_ptr()}}
106impl<'a> From<Boolean<'a>> for Object<'a> {fn from(value: Boolean<'a>) -> Self {value.as_object()}}
107impl<'a> TryFrom<Object<'a>> for Boolean<'a> {type Error = Type; fn try_from (value: Object<'a>) -> Result<Self, Type> {value.try_as()}}
108impl Display for Boolean<'_> {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {Display::fmt(&(self.value()), f)}}
109
110
111/// Represents an ActionScript `String` object.
112#[derive(Debug, Clone, Copy, PartialEq, Eq)]
113#[repr(transparent)]
114pub struct StringObject <'a> (NonNullFREObject, PhantomData<&'a()>);
115impl<'a> StringObject<'a> {
116    #[allow(unused_variables)]
117    pub fn new (ctx: &CurrentContext<'a>, value: &str) -> Self {
118        let value = value.as_bytes();
119        debug_assert!(value.len() <= u32::MAX as usize);
120        let mut obj = std::ptr::null_mut();
121        let r = unsafe {FRENewObjectFromUTF8(value.len() as u32, value.as_ptr(), &mut obj)};
122        debug_assert!(r.is_ok());
123        assert!(!obj.is_null());
124        unsafe {transmute(obj)}
125    }
126    pub fn value (self) -> &'a str {
127        let mut len = u32::default();
128        let mut ptr = std::ptr::null();
129        let r = unsafe {FREGetObjectAsUTF8(self.as_ptr(), &mut len, &mut ptr)};
130        debug_assert!(r.is_ok());
131        let bytes = unsafe {std::slice::from_raw_parts(ptr, len as usize)};
132        unsafe {str::from_utf8_unchecked(bytes)}
133    }
134}
135unsafe impl<'a> AsObject<'a> for StringObject<'a> {const TYPE: Type = Type::String;}
136unsafe impl<'a> TryAs<'a, StringObject<'a>> for Object<'a> {}
137impl From<StringObject<'_>> for FREObject {fn from(value: StringObject) -> Self {value.as_ptr()}}
138impl<'a> From<StringObject<'a>> for Object<'a> {fn from(value: StringObject<'a>) -> Self {value.as_object()}}
139impl<'a> TryFrom<Object<'a>> for StringObject<'a> {type Error = Type; fn try_from (value: Object<'a>) -> Result<Self, Type> {value.try_as()}}
140impl Display for StringObject<'_> {fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {Display::fmt(self.value(), f)}}