dfx_base/fields/converters/
int.rs1use crate::field_map::FieldValue;
2use crate::fields::converters::TryFrom;
3use crate::fields::ConversionError;
4
5use super::IntoBytes;
6
7impl<'a> TryFrom<&'a FieldValue> for usize {
8 type Error = ConversionError;
9
10 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
11 let ref_str: &str = TryFrom::try_from(value)?;
12
13 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
14 }
15}
16
17impl<'a> TryFrom<&'a FieldValue> for u128 {
18 type Error = ConversionError;
19
20 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
21 let ref_str: &str = TryFrom::try_from(value)?;
22
23 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
24 }
25}
26
27impl<'a> TryFrom<&'a FieldValue> for u64 {
28 type Error = ConversionError;
29
30 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
31 let ref_str: &str = TryFrom::try_from(value)?;
32
33 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
34 }
35}
36
37impl<'a> TryFrom<&'a FieldValue> for u32 {
38 type Error = ConversionError;
39
40 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
41 let mut sum = 0;
42 for byte in value.iter() {
43 let byte = *byte;
44 if byte >= b'0' && byte <= b'9' {
45 sum = 10 * sum;
46 sum += byte as u32 - b'0' as u32;
47 } else {
48 return Err(ConversionError::IntParseErr);
49 }
50 }
51 Ok(sum)
52 }
56}
57
58impl<'a> TryFrom<&'a FieldValue> for u16 {
59 type Error = ConversionError;
60
61 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
62 let ref_str: &str = TryFrom::try_from(value)?;
63
64 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
65 }
66}
67
68impl<'a> TryFrom<&'a FieldValue> for u8 {
69 type Error = ConversionError;
70
71 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
72 let ref_str: &str = TryFrom::try_from(value)?;
73
74 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
75 }
76}
77
78impl<'a> TryFrom<&'a FieldValue> for i128 {
79 type Error = ConversionError;
80
81 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
82 let ref_str: &str = TryFrom::try_from(value)?;
83
84 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
85 }
86}
87
88impl<'a> TryFrom<&'a FieldValue> for i64 {
89 type Error = ConversionError;
90
91 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
92 let ref_str: &str = TryFrom::try_from(value)?;
93
94 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
95 }
96}
97
98impl<'a> TryFrom<&'a FieldValue> for i32 {
99 type Error = ConversionError;
100
101 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
102 let ref_str: &str = TryFrom::try_from(value)?;
103
104 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
105 }
106}
107
108impl<'a> TryFrom<&'a FieldValue> for i16 {
109 type Error = ConversionError;
110
111 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
112 let ref_str: &str = TryFrom::try_from(value)?;
113
114 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
115 }
116}
117
118impl<'a> TryFrom<&'a FieldValue> for i8 {
119 type Error = ConversionError;
120
121 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
122 let ref_str: &str = TryFrom::try_from(value)?;
123
124 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
125 }
126}
127
128impl<'a> TryFrom<&'a FieldValue> for f64 {
129 type Error = ConversionError;
130
131 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
132 let ref_str: &str = TryFrom::try_from(value)?;
133 match ref_str.chars().next() {
135 Some('+') => {
136 return Err(ConversionError::IntParseErr);
137 },
138 _ => {}
139 }
140 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
141 }
142}
143
144impl<'a> TryFrom<&'a FieldValue> for f32 {
145 type Error = ConversionError;
146
147 fn try_from(value: &'a FieldValue) -> Result<Self, Self::Error> {
148 let ref_str: &str = TryFrom::try_from(value)?;
149 match ref_str.chars().next() {
151 Some('+') => {
152 return Err(ConversionError::IntParseErr);
153 },
154 _ => {}
155 }
156 ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
157 }
158}
159
160impl IntoBytes<FieldValue> for usize {
161 fn as_bytes(&self) -> FieldValue {
162 format!("{}", self).as_bytes().to_vec().into()
163 }
164}
165
166impl IntoBytes<FieldValue> for f64 {
167 fn as_bytes(&self) -> FieldValue {
168 format!("{}", self).as_bytes().to_vec().into()
169 }
170}
171
172impl IntoBytes<FieldValue> for i64 {
173 fn as_bytes(&self) -> FieldValue {
174 format!("{}", self).as_bytes().to_vec().into()
175 }
176}