rof_rs/object_format/data_value/
float.rs1use crate::object_format::property::property_type::PropertyType;
2
3use super::super::DataValue;
4
5#[derive(Debug)]
8pub enum DataValueFloat {
9 F32(f32),
10 F64(f64),
11}
12
13impl DataValue for DataValueFloat {
14 fn serialize(
15 &self,
16 _: bool,
17 _: usize,
18 ) -> (
19 PropertyType, String, ) {
22 match self {
23 Self::F32(inner) => (PropertyType::simple(String::from("f32")), inner.to_string()),
24 Self::F64(inner) => (PropertyType::simple(String::from("f64")), inner.to_string()),
25 }
26 }
27
28 fn deserialize(
29 serialized_type: &PropertyType,
30 serialized_value: &str,
31 ) -> Option<Box<dyn DataValue>>
32 where
33 Self: Sized,
34 {
35 if serialized_type.sub_types_included() {
36 return None;
37 }
38
39 match serialized_type.get_base_type() {
40 "f32" => {
41 if let Ok(parsed_float) = serialized_value.parse::<f32>() {
42 return Some(Box::new(Self::F32(parsed_float)));
43 } else {
44 return None;
45 }
46 }
47
48 "f64" => {
49 if let Ok(parsed_float) = serialized_value.parse::<f64>() {
50 return Some(Box::new(Self::F64(parsed_float)));
51 } else {
52 return None;
53 }
54 }
55
56 _ => None,
57 }
58 }
59
60 fn clone_data_value(&self) -> Box<dyn DataValue> {
61 Box::new(match self {
62 Self::F32(value) => Self::F32(value.clone()),
63 Self::F64(value) => Self::F64(value.clone()),
64 })
65 }
66
67 fn as_f32(&self) -> f32 {
70 match self {
71 Self::F32(inner) => *inner,
72 Self::F64(inner) => *inner as f32,
73 }
74 }
75
76 fn as_f64(&self) -> f64 {
77 match self {
78 Self::F32(inner) => *inner as f64,
79 Self::F64(inner) => *inner,
80 }
81 }
82
83 fn as_u8(&self) -> u8 {
84 match self {
85 Self::F32(inner) => *inner as u8,
86 Self::F64(inner) => *inner as u8,
87 }
88 }
89
90 fn as_i8(&self) -> i8 {
91 match self {
92 Self::F32(inner) => *inner as i8,
93 Self::F64(inner) => *inner as i8,
94 }
95 }
96
97 fn as_u16(&self) -> u16 {
98 match self {
99 Self::F32(inner) => *inner as u16,
100 Self::F64(inner) => *inner as u16,
101 }
102 }
103
104 fn as_i16(&self) -> i16 {
105 match self {
106 Self::F32(inner) => *inner as i16,
107 Self::F64(inner) => *inner as i16,
108 }
109 }
110
111 fn as_u32(&self) -> u32 {
112 match self {
113 Self::F32(inner) => *inner as u32,
114 Self::F64(inner) => *inner as u32,
115 }
116 }
117
118 fn as_i32(&self) -> i32 {
119 match self {
120 Self::F32(inner) => *inner as i32,
121 Self::F64(inner) => *inner as i32,
122 }
123 }
124
125 fn as_u64(&self) -> u64 {
126 match self {
127 Self::F32(inner) => *inner as u64,
128 Self::F64(inner) => *inner as u64,
129 }
130 }
131
132 fn as_i64(&self) -> i64 {
133 match self {
134 Self::F32(inner) => *inner as i64,
135 Self::F64(inner) => *inner as i64,
136 }
137 }
138
139 fn as_u128(&self) -> u128 {
140 match self {
141 Self::F32(inner) => *inner as u128,
142 Self::F64(inner) => *inner as u128,
143 }
144 }
145
146 fn as_i128(&self) -> i128 {
147 match self {
148 Self::F32(inner) => *inner as i128,
149 Self::F64(inner) => *inner as i128,
150 }
151 }
152
153 fn as_usize(&self) -> usize {
154 match self {
155 Self::F32(inner) => *inner as usize,
156 Self::F64(inner) => *inner as usize,
157 }
158 }
159
160 fn as_isize(&self) -> isize {
161 match self {
162 Self::F32(inner) => *inner as isize,
163 Self::F64(inner) => *inner as isize,
164 }
165 }
166}