use llm_toolkit::ToPrompt;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, ToPrompt)]
#[prompt(mode = "full")]
pub struct EvaluationResult {
pub rule: String,
pub passed: bool,
}
#[derive(Serialize, Deserialize, Debug, Clone, ToPrompt)]
#[prompt(mode = "full")]
pub struct ProducerOutput {
pub evaluation_passed: bool,
pub results: Vec<EvaluationResult>,
}
#[test]
fn test_nested_vec_schema_expansion() {
let schema = ProducerOutput::prompt_schema();
println!("Generated schema:\n{}", schema);
assert!(schema.contains("type ProducerOutput = {"));
assert!(schema.contains("evaluation_passed: boolean;"));
assert!(schema.contains("results: EvaluationResult[];"));
assert!(
schema.contains("type EvaluationResult = {"),
"Schema should include nested type definition"
);
assert!(
schema.contains("rule: string"),
"Schema should include fields from nested type"
);
}
#[test]
fn test_evaluation_result_schema() {
let schema = EvaluationResult::prompt_schema();
println!("EvaluationResult schema:\n{}", schema);
assert!(schema.contains("type EvaluationResult = {"));
assert!(schema.contains("rule: string;"));
assert!(schema.contains("passed: boolean;"));
}
#[test]
fn test_nested_schema_with_comments() {
let schema = ProducerOutput::prompt_schema();
assert!(schema.contains("// Whether the evaluation passed all checks"));
assert!(schema.contains("// List of evaluation results for each rule"));
assert!(
schema.contains("// The rule being checked"),
"Schema should include comments from nested type"
);
assert!(
schema.contains("// Whether this specific rule passed"),
"Schema should include all fields from nested type"
);
}