Skip to main content

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}