mirror of
https://github.com/a2x/cs2-dumper.git
synced 2025-04-05 00:25:36 +08:00
63 lines
1.4 KiB
Rust
63 lines
1.4 KiB
Rust
use std::io::{Result, Write};
|
|
|
|
use serde_json::{json, Value};
|
|
|
|
use super::FileBuilder;
|
|
|
|
#[derive(Default)]
|
|
pub struct JsonFileBuilder {
|
|
json: Value,
|
|
namespace: String,
|
|
}
|
|
|
|
impl FileBuilder for JsonFileBuilder {
|
|
fn extension(&mut self) -> &str {
|
|
"json"
|
|
}
|
|
|
|
fn write_top_level(&mut self, _output: &mut dyn Write) -> Result<()> {
|
|
Ok(())
|
|
}
|
|
|
|
fn write_namespace(&mut self, _output: &mut dyn Write, name: &str) -> Result<()> {
|
|
self.namespace = name.to_string();
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn write_variable(
|
|
&mut self,
|
|
_output: &mut dyn Write,
|
|
name: &str,
|
|
value: usize,
|
|
_comment: Option<&str>,
|
|
) -> Result<()> {
|
|
if let Some(json_as_map) = self.json.as_object_mut() {
|
|
let namespace_entry = json_as_map
|
|
.entry(self.namespace.clone())
|
|
.or_insert_with(|| json!({}));
|
|
|
|
if let Some(namespace_object) = namespace_entry.as_object_mut() {
|
|
namespace_object.insert(name.to_string(), json!(value));
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn write_closure(&mut self, output: &mut dyn Write, eof: bool) -> Result<()> {
|
|
if eof {
|
|
write!(
|
|
output,
|
|
"{}",
|
|
serde_json::to_string_pretty(&self.json).unwrap()
|
|
)
|
|
.unwrap();
|
|
|
|
self.json = json!({});
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|