terrazzo-terminal 0.2.7

A simple web-based terminal emulator built on Terrazzo.
use super::AddConversionFn;
use crate::converter::api::Language;

pub fn add_json(input: &str, add: &mut impl AddConversionFn) -> bool {
    let Ok(json) = serde_json::from_str::<serde_json::Value>(input) else {
        return false;
    };
    if let Ok(json) = serde_json::to_string_pretty(&json) {
        add(Language::new("JSON"), json);
    }
    if let Ok(yaml) = serde_yaml_ng::to_string(&json) {
        add(Language::new("YAML"), yaml);
    }
    return true;
}

pub fn add_yaml(input: &str, add: &mut impl AddConversionFn) {
    let Ok(json) = serde_yaml_ng::from_str::<serde_json::Value>(input) else {
        return;
    };
    if let Ok(json) = serde_json::to_string_pretty(&json) {
        add(Language::new("JSON"), json);
    }
    if let Ok(yaml) = serde_yaml_ng::to_string(&json) {
        add(Language::new("YAML"), yaml);
    }
}

#[cfg(test)]
mod tests {
    use super::super::tests::GetConversionForTest as _;

    #[tokio::test]
    async fn json_to_json() {
        let conversion =
            r#" { "a": [1,2,3], "b": {"b1":[11],"b2":"22"}} "#.get_conversion("JSON").await;
        assert_eq!(
            r#"{
  "a": [
    1,
    2,
    3
  ],
  "b": {
    "b1": [
      11
    ],
    "b2": "22"
  }
}"#,
            conversion
        );
    }

    #[tokio::test]
    async fn json_to_yaml() {
        let conversion =
            r#" { "a": [1,2,3], "b": {"b1":[11],"b2":"22"}} "#.get_conversion("YAML").await;
        assert_eq!(
            r#"a:
- 1
- 2
- 3
b:
  b1:
  - 11
  b2: '22'
"#,
            conversion
        );
    }

    #[tokio::test]
    async fn yaml_to_json() {
        let conversion = r#"
a:
- 1
- 2
- 3
b:
  b1:
  - 11
  b2: '22'
"#
        .get_conversion("JSON")
        .await;
        assert_eq!(
            r#"{
  "a": [
    1,
    2,
    3
  ],
  "b": {
    "b1": [
      11
    ],
    "b2": "22"
  }
}"#,
            conversion
        );
    }

    #[tokio::test]
    async fn yaml_to_yaml() {
        let conversion = r#"
a:
    - 1
    - 2
    - 3
b:
    b1:
        - 11
    b2: '22'
"#
        .get_conversion("YAML")
        .await;
        assert_eq!(
            r#"a:
- 1
- 2
- 3
b:
  b1:
  - 11
  b2: '22'
"#,
            conversion
        );
    }
}