windows_metadata/reader/tables/
constant.rs1use super::*;
2
3impl<'a> Constant<'a> {
4 pub fn ty(&self) -> Type {
5 match self.usize(0).try_into().unwrap() {
6 ELEMENT_TYPE_U1 => Type::U8,
7 ELEMENT_TYPE_I1 => Type::I8,
8 ELEMENT_TYPE_U2 => Type::U16,
9 ELEMENT_TYPE_I2 => Type::I16,
10 ELEMENT_TYPE_U4 => Type::U32,
11 ELEMENT_TYPE_I4 => Type::I32,
12 ELEMENT_TYPE_U8 => Type::U64,
13 ELEMENT_TYPE_I8 => Type::I64,
14 ELEMENT_TYPE_U => Type::USize,
15 ELEMENT_TYPE_I => Type::ISize,
16 ELEMENT_TYPE_R4 => Type::F32,
17 ELEMENT_TYPE_R8 => Type::F64,
18 ELEMENT_TYPE_BOOLEAN => Type::Bool,
19 ELEMENT_TYPE_STRING => Type::String,
20 rest => panic!("{rest:?}"),
21 }
22 }
23
24 pub fn value(&self) -> Value {
25 let mut blob = self.blob(2);
26
27 match self.ty() {
28 Type::I8 => Value::I8(blob.read_i8()),
29 Type::U8 => Value::U8(blob.read_u8()),
30 Type::I16 => Value::I16(blob.read_i16()),
31 Type::U16 => Value::U16(blob.read_u16()),
32 Type::I32 => Value::I32(blob.read_i32()),
33 Type::U32 => Value::U32(blob.read_u32()),
34 Type::I64 => Value::I64(blob.read_i64()),
35 Type::U64 => Value::U64(blob.read_u64()),
36 Type::ISize => Value::ISize(blob.read_i64()),
37 Type::USize => Value::USize(blob.read_u64()),
38 Type::F32 => Value::F32(blob.read_f32()),
39 Type::F64 => Value::F64(blob.read_f64()),
40 Type::Bool => Value::Bool(blob.read_bool()),
41 Type::String => Value::Utf16(blob.read_utf16()),
42 rest => panic!("{rest:?}"),
43 }
44 }
45}