diff options
Diffstat (limited to 'src/object')
-rw-r--r-- | src/object/helper.rs | 2 | ||||
-rw-r--r-- | src/object/mod.rs | 1 | ||||
-rw-r--r-- | src/object/parser.rs | 2 | ||||
-rw-r--r-- | src/object/read.rs | 16 |
4 files changed, 14 insertions, 7 deletions
diff --git a/src/object/helper.rs b/src/object/helper.rs index 74d18ea..4aba67d 100644 --- a/src/object/helper.rs +++ b/src/object/helper.rs @@ -104,7 +104,7 @@ impl Value { V::Array(values.into_iter().map(|e| V::Number(e.into())).collect()) } Value::Array(values) => V::Array(values.into_iter().map(Value::to_json).collect()), - Value::Object { class, fields } => V::Object( + Value::Object { class, fields, .. } => V::Object( fields .into_iter() .map(|(k, v)| (k, v.to_json())) diff --git a/src/object/mod.rs b/src/object/mod.rs index efc1544..08f76cd 100644 --- a/src/object/mod.rs +++ b/src/object/mod.rs @@ -21,6 +21,7 @@ pub enum Value { Array(Vec<Value>), Object { class: String, + file: usize, fields: BTreeMap<String, Value>, }, Typeless(Vec<u8>), diff --git a/src/object/parser.rs b/src/object/parser.rs index b9cc1d4..27cb975 100644 --- a/src/object/parser.rs +++ b/src/object/parser.rs @@ -11,7 +11,7 @@ impl Value { T::from_value(self) } pub fn as_class(self, name: &'static str) -> Result<Fields> { - if let Value::Object { class, fields } = self { + if let Value::Object { class, fields, .. } = self { if class == name { Ok(Fields { class: name, diff --git a/src/object/read.rs b/src/object/read.rs index 641bdcc..c41163a 100644 --- a/src/object/read.rs +++ b/src/object/read.rs @@ -7,7 +7,12 @@ use std::io::Seek; use std::{collections::BTreeMap, io::Read}; impl Value { - pub fn read(ty: &TypeTreeNode, e: Endianness, data: &mut (impl Read + Seek)) -> Result<Value> { + pub fn read( + ty: &TypeTreeNode, + e: Endianness, + file: usize, + data: &mut (impl Read + Seek), + ) -> Result<Value> { let mut align = false; let pos_before = data.stream_position()?; let r = match ty.type_string.as_str() { @@ -36,7 +41,7 @@ impl Value { Ok(Value::F64(data.read_f64(e)?)) } "string" => { - let Value::Array(arr) = Value::read(&ty.children[0], e, data)? else { + let Value::Array(arr) = Value::read(&ty.children[0], e, file, data)? else { unreachable!() }; let bytes = arr @@ -51,13 +56,13 @@ impl Value { "Array" => { align |= ty.children[0].post_align(); assert_eq!(ty.byte_size, -1); - let Value::I32(size) = Value::read(&ty.children[0], e, data)? else { + let Value::I32(size) = Value::read(&ty.children[0], e, file, data)? else { unreachable!() }; trace!("array of size {size}"); let mut elems = Vec::new(); for _ in 0..size { - elems.push(Value::read(&ty.children[1], e, data)?); + elems.push(Value::read(&ty.children[1], e, file, data)?); } Ok(Value::Array(elems)) } @@ -73,10 +78,11 @@ impl Value { } let mut fields = BTreeMap::new(); for c in &ty.children { - fields.insert(c.name_string.clone(), Value::read(&c, e, data)?); + fields.insert(c.name_string.clone(), Value::read(&c, e, file, data)?); } Ok(Value::Object { fields, + file, class: ty.type_string.clone(), }) } |