dfx_base/fields/converters/
int.rs

1use 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        // let ref_str: &str = TryFrom::try_from(value)?;
53
54        // ref_str.parse().map_err(|_e| ConversionError::IntParseErr)
55    }
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        //TODO replace with better function
134        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        //TODO replace with better function
150        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}