use anyhow::{Context, Result};
use serde_json::Value;
#[allow(dead_code)]
pub fn safe_json_to_element_value(json_value: &Value) -> Result<drasi_core::models::ElementValue> {
Ok(drasi_lib::sources::convert_json_to_element_value(
json_value,
))
}
pub fn json_to_element_value_or_default(
json_value: &Value,
_default: drasi_core::models::ElementValue,
) -> drasi_core::models::ElementValue {
drasi_lib::sources::convert_json_to_element_value(json_value)
}
#[allow(dead_code)]
pub fn batch_json_to_element_values<'a>(
values: impl Iterator<Item = &'a Value>,
) -> Vec<drasi_core::models::ElementValue> {
values
.map(drasi_lib::sources::convert_json_to_element_value)
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[test]
fn test_safe_json_to_element_value() {
let number = json!(42);
let result = safe_json_to_element_value(&number);
assert!(result.is_ok());
let string = json!("test");
let result = safe_json_to_element_value(&string);
assert!(result.is_ok());
let boolean = json!(true);
let result = safe_json_to_element_value(&boolean);
assert!(result.is_ok());
}
#[test]
fn test_safe_json_to_element_value_with_null() {
let null_val = json!(null);
let result = safe_json_to_element_value(&null_val);
assert!(result.is_ok());
assert!(matches!(
result.unwrap(),
drasi_core::models::ElementValue::Null
));
}
#[test]
fn test_safe_json_to_element_value_with_array() {
let array = json!([1, 2, 3]);
let result = safe_json_to_element_value(&array);
assert!(result.is_ok());
}
#[test]
fn test_json_to_element_value_or_default() {
let valid = json!(42);
let default = drasi_core::models::ElementValue::Null;
let result = json_to_element_value_or_default(&valid, default.clone());
assert!(matches!(
result,
drasi_core::models::ElementValue::Integer(_)
));
}
#[test]
fn test_json_to_element_value_or_default_with_float() {
let float_val = json!(3.5);
let default = drasi_core::models::ElementValue::Integer(0);
let result = json_to_element_value_or_default(&float_val, default);
assert!(matches!(result, drasi_core::models::ElementValue::Float(_)));
}
#[test]
fn test_json_to_element_value_or_default_with_string() {
let string_val = json!("hello");
let default = drasi_core::models::ElementValue::Null;
let result = json_to_element_value_or_default(&string_val, default);
assert!(matches!(
result,
drasi_core::models::ElementValue::String(_)
));
}
#[test]
fn test_batch_json_to_element_values() {
let values = [json!(1), json!("test"), json!(true), json!(null)];
let results = batch_json_to_element_values(values.iter());
assert!(!results.is_empty());
}
#[test]
fn test_batch_json_to_element_values_with_mixed_types() {
let values = [
json!(42),
json!("string"),
json!(true),
json!(3.5),
json!(null),
json!([1, 2, 3]),
json!({"key": "value"}),
];
let results = batch_json_to_element_values(values.iter());
assert_eq!(results.len(), 7);
}
#[test]
fn test_batch_json_to_element_values_empty_iterator() {
let values: [serde_json::Value; 0] = [];
let results = batch_json_to_element_values(values.iter());
assert!(results.is_empty());
}
}