67 lines
1.2 KiB
Rust
67 lines
1.2 KiB
Rust
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
|
|
pub enum PrimitiveKind {
|
|
U8,
|
|
U16,
|
|
U32,
|
|
U64,
|
|
I8,
|
|
I16,
|
|
I32,
|
|
I64,
|
|
F32,
|
|
F64,
|
|
}
|
|
|
|
impl PrimitiveKind {
|
|
pub fn size(&self) -> u8 {
|
|
use PrimitiveKind::*;
|
|
match self {
|
|
U8 | I8 => 1,
|
|
U16 | I16 => 2,
|
|
U32 | I32 | F32 => 4,
|
|
U64 | I64 | F64 => 8,
|
|
}
|
|
}
|
|
|
|
pub fn is_signed(&self) -> bool {
|
|
use PrimitiveKind::*;
|
|
match self {
|
|
U8 | U16 | U32 | U64 => false,
|
|
_ => true,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Debug, PartialEq)]
|
|
pub enum PrimitiveValue {
|
|
U8(u8),
|
|
U16(u16),
|
|
U32(u32),
|
|
U64(u64),
|
|
I8(i8),
|
|
I16(i16),
|
|
I32(i32),
|
|
I64(i64),
|
|
F32(f32),
|
|
F64(f64),
|
|
}
|
|
|
|
impl PrimitiveValue {
|
|
pub fn kind(&self) -> PrimitiveKind {
|
|
use PrimitiveKind as Kind;
|
|
use PrimitiveValue::*;
|
|
match self {
|
|
U8(_) => Kind::U8,
|
|
U16(_) => Kind::U16,
|
|
U32(_) => Kind::U32,
|
|
U64(_) => Kind::U64,
|
|
I8(_) => Kind::I8,
|
|
I16(_) => Kind::I16,
|
|
I32(_) => Kind::I32,
|
|
I64(_) => Kind::I64,
|
|
F32(_) => Kind::F32,
|
|
F64(_) => Kind::F64,
|
|
}
|
|
}
|
|
}
|