xml_disassembler/transformers/
formats.rs1use serde_json::Value;
4
5use crate::types::XmlElement;
6
7pub async fn transform_to_yaml(parsed_xml: &XmlElement) -> String {
8 serde_yaml::to_string(parsed_xml).unwrap_or_default()
9}
10
11pub async fn transform_to_json5(parsed_xml: &XmlElement) -> String {
12 serde_json::to_string_pretty(parsed_xml).unwrap_or_default()
13}
14
15pub async fn transform_to_json(parsed_xml: &XmlElement) -> String {
16 serde_json::to_string_pretty(parsed_xml).unwrap_or_default()
17}
18
19pub async fn transform_to_toml(parsed_xml: &XmlElement) -> String {
20 toml::to_string_pretty(&convert_json_to_toml_value(parsed_xml)).unwrap_or_default()
21}
22
23pub async fn transform_to_ini(parsed_xml: &XmlElement) -> String {
24 convert_to_ini_string(parsed_xml)
27}
28
29fn convert_json_to_toml_value(v: &Value) -> toml::Value {
30 match v {
31 Value::Null => toml::Value::String(String::new()),
32 Value::Bool(b) => toml::Value::Boolean(*b),
33 Value::Number(n) => {
34 if let Some(i) = n.as_i64() {
35 toml::Value::Integer(i)
36 } else if let Some(f) = n.as_f64() {
37 toml::Value::Float(f)
38 } else {
39 toml::Value::String(n.to_string())
40 }
41 }
42 Value::String(s) => toml::Value::String(s.clone()),
43 Value::Array(arr) => {
44 toml::Value::Array(arr.iter().map(convert_json_to_toml_value).collect())
45 }
46 Value::Object(obj) => {
47 let mut table = toml::map::Map::new();
48 for (k, v) in obj {
49 table.insert(k.clone(), convert_json_to_toml_value(v));
50 }
51 toml::Value::Table(table)
52 }
53 }
54}
55
56fn convert_to_ini_string(v: &Value) -> String {
57 let mut out = String::new();
58 if let Some(obj) = v.as_object() {
59 for (section, value) in obj {
60 if section.starts_with('@') || section == "?xml" || section == "#text" {
61 continue;
62 }
63 out.push_str(&format!("[{}]\n", section));
64 if let Some(inner) = value.as_object() {
65 for (k, val) in inner {
66 if !k.starts_with('@') && k != "#text" {
67 if let Some(s) = val.as_str() {
68 out.push_str(&format!("{} = {}\n", k, s));
69 }
70 }
71 }
72 }
73 out.push('\n');
74 }
75 }
76 out
77}