xcell_types/integer/
kind.rs1use 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}