fre_rs/types/
primitive.rs1use 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#[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)}}