Skip to main content

xml_disassembler/transformers/
get_transformer.rs

1//! Get transformer for format - returns output string from XmlElement.
2
3use crate::transformers::{transform_to_json, transform_to_json5, transform_to_yaml};
4use crate::types::XmlElement;
5
6/// Transform XmlElement to string in the given format.
7/// Returns None if format is not supported (e.g. "xml" uses build_xml_string instead).
8pub async fn transform_format(format: &str, xml_content: &XmlElement) -> Option<String> {
9    let result = match format.to_lowercase().as_str() {
10        "yaml" | "yml" => transform_to_yaml(xml_content).await,
11        "json5" => transform_to_json5(xml_content).await,
12        "json" => transform_to_json(xml_content).await,
13        _ => return None,
14    };
15    Some(result)
16}
17
18#[cfg(test)]
19mod tests {
20    use super::*;
21    use serde_json::json;
22
23    #[tokio::test]
24    async fn transform_format_yaml() {
25        let el = json!({ "r": {} });
26        assert!(transform_format("yaml", &el).await.is_some());
27        assert!(transform_format("yml", &el).await.is_some());
28    }
29
30    #[tokio::test]
31    async fn transform_format_json() {
32        let el = json!({ "r": {} });
33        assert!(transform_format("json", &el).await.is_some());
34    }
35
36    #[tokio::test]
37    async fn transform_format_json5() {
38        let el = json!({ "r": {} });
39        assert!(transform_format("json5", &el).await.is_some());
40    }
41
42    #[tokio::test]
43    async fn transform_format_unsupported_returns_none() {
44        let el = json!({ "r": {} });
45        assert!(transform_format("xml", &el).await.is_none());
46        assert!(transform_format("unknown", &el).await.is_none());
47    }
48}