xcell_types/integer/
kind.rs

1use super::*;
2
3impl Default for IntegerKind {
4    fn default() -> Self {
5        IntegerKind::Unsigned32
6    }
7}
8
9impl IntegerKind {
10    pub fn unsigned(&self) -> bool {
11        !self.signed()
12    }
13    pub fn signed(&self) -> bool {
14        match self {
15            IntegerKind::Integer8 => true,
16            IntegerKind::Integer16 => true,
17            IntegerKind::Integer32 => true,
18            IntegerKind::Integer64 => true,
19            IntegerKind::Unsigned8 => false,
20            IntegerKind::Unsigned16 => false,
21            IntegerKind::Unsigned32 => false,
22            IntegerKind::Unsigned64 => false,
23        }
24    }
25    pub fn size(&self) -> usize {
26        match self {
27            IntegerKind::Integer8 => 1,
28            IntegerKind::Integer16 => 2,
29            IntegerKind::Integer32 => 4,
30            IntegerKind::Integer64 => 8,
31            IntegerKind::Unsigned8 => 1,
32            IntegerKind::Unsigned16 => 2,
33            IntegerKind::Unsigned32 => 4,
34            IntegerKind::Unsigned64 => 8,
35        }
36    }
37    pub fn cast_integer(&self, input: BigInt) -> XCellValue {
38        match self {
39            IntegerKind::Integer8 => XCellValue::Integer8(input.to_i8().unwrap_or_default()),
40            IntegerKind::Integer16 => XCellValue::Integer16(input.to_i16().unwrap_or_default()),
41            IntegerKind::Integer32 => XCellValue::Integer32(input.to_i32().unwrap_or_default()),
42            IntegerKind::Integer64 => XCellValue::Integer64(input.to_i64().unwrap_or_default()),
43            IntegerKind::Unsigned8 => XCellValue::Unsigned8(input.to_u8().unwrap_or_default()),
44            IntegerKind::Unsigned16 => XCellValue::Unsigned16(input.to_u16().unwrap_or_default()),
45            IntegerKind::Unsigned32 => XCellValue::Unsigned32(input.to_u32().unwrap_or_default()),
46            IntegerKind::Unsigned64 => XCellValue::Unsigned64(input.to_u64().unwrap_or_default()),
47        }
48    }
49}