windows_metadata/reader/tables/
constant.rs1use super::*;
2
3impl Constant<'_> {
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_R4 => Type::F32,
15 ELEMENT_TYPE_R8 => Type::F64,
16 ELEMENT_TYPE_STRING => Type::String,
17 rest => panic!("{rest:?}"),
18 }
19 }
20
21 pub fn parent(&self) -> HasConstant {
22 self.decode(1)
23 }
24
25 pub fn value(&self) -> Value {
26 let mut blob = self.blob(2);
27
28 match self.ty() {
29 Type::I8 => Value::I8(blob.read_i8()),
30 Type::U8 => Value::U8(blob.read_u8()),
31 Type::I16 => Value::I16(blob.read_i16()),
32 Type::U16 => Value::U16(blob.read_u16()),
33 Type::I32 => Value::I32(blob.read_i32()),
34 Type::U32 => Value::U32(blob.read_u32()),
35 Type::I64 => Value::I64(blob.read_i64()),
36 Type::U64 => Value::U64(blob.read_u64()),
37 Type::F32 => Value::F32(blob.read_f32()),
38 Type::F64 => Value::F64(blob.read_f64()),
39 Type::String => Value::Utf16(blob.read_utf16()),
40 rest => panic!("{rest:?}"),
41 }
42 }
43}