aboutsummaryrefslogtreecommitdiff
path: root/src/object.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/object.rs')
-rw-r--r--src/object.rs34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/object.rs b/src/object.rs
index 5275eb7..ab27ea4 100644
--- a/src/object.rs
+++ b/src/object.rs
@@ -1,7 +1,7 @@
use crate::helper::{AlignExt, Endianness, ReadExt};
use crate::serialized_file::TypeTreeNode;
use anyhow::Result;
-use log::{debug, trace};
+use log::trace;
use std::io::Seek;
use std::{collections::BTreeMap, io::Read};
@@ -92,3 +92,35 @@ pub fn read_value(
}
r
}
+
+impl Value {
+ pub fn to_json(self) -> serde_json::Value {
+ match self {
+ Value::Bool(x) => serde_json::Value::Bool(x),
+ Value::U8(x) => serde_json::Value::Number(x.into()),
+ Value::U16(x) => serde_json::Value::Number(x.into()),
+ Value::I16(x) => serde_json::Value::Number(x.into()),
+ Value::U32(x) => serde_json::Value::Number(x.into()),
+ Value::I32(x) => serde_json::Value::Number(x.into()),
+ Value::F32(x) => serde_json::Value::Number(
+ serde_json::Number::from_f64(x as f64).unwrap_or(0.into()),
+ ),
+ Value::I64(x) => serde_json::Value::Number(x.into()),
+ Value::F64(x) => serde_json::Value::Number(serde_json::Number::from_f64(x).unwrap()),
+ Value::String(x) => serde_json::Value::String(x),
+ Value::Array(values) => {
+ serde_json::Value::Array(values.into_iter().map(Value::to_json).collect())
+ }
+ Value::Object { class, fields } => serde_json::Value::Object(
+ fields
+ .into_iter()
+ .map(|(k, v)| (k, v.to_json()))
+ .chain(Some((
+ "_class".to_string(),
+ serde_json::Value::String(class),
+ )))
+ .collect(),
+ ),
+ }
+ }
+}