use crate::models::schema::*;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct InputDataModelDefinition {
#[serde(skip_serializing_if = "Option::is_none")]
pub schema: Option<SchemaDefinition>,
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<Value>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_input_with_from() {
let json = r#"{"from": {"key": "value"}}"#;
let input: InputDataModelDefinition = serde_json::from_str(json).unwrap();
assert!(input.from.is_some());
assert!(input.schema.is_none());
}
#[test]
fn test_input_with_schema() {
let json = r#"{"schema": {"format": "json", "document": {"type": "object"}}}"#;
let input: InputDataModelDefinition = serde_json::from_str(json).unwrap();
assert!(input.schema.is_some());
assert!(input.from.is_none());
}
#[test]
fn test_input_roundtrip() {
let json = r#"{"from": {"key": "value"}}"#;
let input: InputDataModelDefinition = serde_json::from_str(json).unwrap();
let serialized = serde_json::to_string(&input).unwrap();
let deserialized: InputDataModelDefinition = serde_json::from_str(&serialized).unwrap();
assert_eq!(input, deserialized);
}
#[test]
fn test_input_with_from_expression() {
let json = r#"{"from": "${ .inputData }"}"#;
let input: InputDataModelDefinition = serde_json::from_str(json).unwrap();
assert!(input.from.is_some());
assert_eq!(input.from.unwrap(), serde_json::json!("${ .inputData }"));
}
#[test]
fn test_input_with_schema_and_from() {
let json = r#"{
"schema": {"format": "json", "document": {"type": "object"}},
"from": {"key": "value"}
}"#;
let input: InputDataModelDefinition = serde_json::from_str(json).unwrap();
assert!(input.schema.is_some());
assert!(input.from.is_some());
}
#[test]
fn test_input_default() {
let input = InputDataModelDefinition::default();
assert!(input.schema.is_none());
assert!(input.from.is_none());
}
#[test]
fn test_input_empty_object() {
let json = r#"{}"#;
let input: InputDataModelDefinition = serde_json::from_str(json).unwrap();
assert!(input.schema.is_none());
assert!(input.from.is_none());
}
}