Skip to main content

xml_disassembler/transformers/
formats.rs

1//! Transform XmlElement to various formats.
2
3use 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}