xml_disassembler/transformers/
formats.rs1use crate::types::XmlElement;
4
5pub async fn transform_to_yaml(parsed_xml: &XmlElement) -> String {
6 serde_yaml::to_string(parsed_xml).unwrap_or_default()
7}
8
9pub async fn transform_to_json5(parsed_xml: &XmlElement) -> String {
10 serde_json::to_string_pretty(parsed_xml).unwrap_or_default()
11}
12
13pub async fn transform_to_json(parsed_xml: &XmlElement) -> String {
14 serde_json::to_string_pretty(parsed_xml).unwrap_or_default()
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20 use serde_json::json;
21
22 #[tokio::test]
23 async fn transform_to_yaml_produces_valid_yaml() {
24 let el = json!({ "root": { "a": 1, "b": "two" } });
25 let out = transform_to_yaml(&el).await;
26 assert!(out.contains("root:"));
27 assert!(out.contains("a: 1") || out.contains("a:\n") || out.contains("a:1"));
28 }
29
30 #[tokio::test]
31 async fn transform_to_json_produces_valid_json() {
32 let el = json!({ "root": { "a": 1 } });
33 let out = transform_to_json(&el).await;
34 let parsed: serde_json::Value = serde_json::from_str(&out).unwrap();
35 assert_eq!(
36 parsed
37 .get("root")
38 .and_then(|r| r.get("a"))
39 .and_then(|v| v.as_i64()),
40 Some(1)
41 );
42 }
43
44 #[tokio::test]
45 async fn transform_to_json5_produces_valid_json5() {
46 let el = json!({ "root": { "a": 1 } });
47 let out = transform_to_json5(&el).await;
48 let parsed: serde_json::Value = json5::from_str(&out).unwrap();
49 assert_eq!(
50 parsed
51 .get("root")
52 .and_then(|r| r.get("a"))
53 .and_then(|v| v.as_i64()),
54 Some(1)
55 );
56 }
57}