ai_lib_rust/structured/mod.rs
1//! Structured output module for ai-lib-rust.
2//!
3//! Provides JSON mode, schema validation, and structured output capabilities:
4//! - `OutputValidator`: Validate JSON against schemas
5//! - `ValidationResult`: Result of validation operations
6//! - `ValidationError`: Detailed validation errors
7//!
8//! # Examples
9//!
10//! ```
11//! use ai_lib_rust::structured::{OutputValidator, ValidationResult};
12//! use serde_json::json;
13//!
14//! let schema = json!({
15//! "type": "object",
16//! "properties": {
17//! "name": {"type": "string"},
18//! "age": {"type": "integer"}
19//! },
20//! "required": ["name"]
21//! });
22//!
23//! let validator = OutputValidator::lenient(schema);
24//! let data = json!({"name": "Alice", "age": 30});
25//! let result = validator.validate(data);
26//!
27//! assert!(result.is_valid());
28//! ```
29
30pub mod error;
31pub mod json_mode;
32pub mod schema;
33pub mod validator;
34
35// Re-export commonly used types
36pub use error::{ValidationError, ValidationResult};
37pub use json_mode::{JsonMode, JsonModeConfig, StructuredOutput};
38pub use schema::{json_schema_from_type, schema_from_type_name, SchemaGenerator};
39pub use validator::{IntoValidatorData, OutputValidator};
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn test_json_mode_display() {
47 assert_eq!(JsonMode::Json.to_string(), "json_object");
48 assert_eq!(JsonMode::JsonSchema.to_string(), "json_schema");
49 assert_eq!(JsonMode::Off.to_string(), "");
50 }
51
52 #[test]
53 fn test_json_mode_from_str() {
54 assert_eq!("json_object".parse::<JsonMode>().unwrap(), JsonMode::Json);
55 assert_eq!(
56 "json_schema".parse::<JsonMode>().unwrap(),
57 JsonMode::JsonSchema
58 );
59 assert_eq!("off".parse::<JsonMode>().unwrap(), JsonMode::Off);
60 assert_eq!("".parse::<JsonMode>().unwrap(), JsonMode::Off);
61
62 assert!("invalid".parse::<JsonMode>().is_err());
63 }
64}