use crate::intent::Goal;
#[cfg(feature = "schemars")]
pub fn generate_goal_schema() -> schemars::Schema {
schemars::schema_for!(Goal)
}
#[cfg(feature = "schemars")]
pub fn generate_goal_schema_json() -> String {
let schema = generate_goal_schema();
serde_json::to_string_pretty(&schema).expect("Schema serialization should never fail")
}
#[cfg(all(test, feature = "schemars"))]
mod tests {
use super::*;
#[test]
fn test_schema_generation() {
let schema = generate_goal_schema();
assert!(schema.get("title").is_some() || schema.get("$ref").is_some());
let defs = schema.pointer("/$defs").expect("$defs should exist");
let defs_obj = defs.as_object().expect("$defs should be an object");
assert!(
defs_obj.contains_key("Intent"),
"Intent should be in definitions"
);
assert!(
defs_obj.contains_key("ScopeHint"),
"ScopeHint should be in definitions"
);
assert!(
defs_obj.contains_key("Constraint"),
"Constraint should be in definitions"
);
}
#[test]
fn test_schema_json_output() {
let json = generate_goal_schema_json();
let parsed: serde_json::Value = serde_json::from_str(&json).expect("Should be valid JSON");
assert!(parsed.get("$schema").is_some());
assert!(parsed.get("$defs").is_some());
}
#[test]
fn test_intent_variants_in_schema() {
let schema = generate_goal_schema();
let intent_def = schema
.pointer("/$defs/Intent")
.expect("Intent should exist");
assert!(!format!("{:?}", intent_def).is_empty());
}
}