1mod extensions;
9mod generator;
10mod parser;
11mod policy;
12
13pub use extensions::{ChioExtensions, Sensitivity};
14pub use generator::{GeneratorConfig, ManifestGenerator};
15pub use parser::{OpenApiSpec, Operation, Parameter, ParameterLocation, PathItem};
16pub use policy::{DefaultPolicy, PolicyDecision};
17
18use thiserror::Error;
19
20#[derive(Debug, Error)]
22pub enum OpenApiError {
23 #[error("invalid JSON: {0}")]
25 InvalidJson(#[from] serde_json::Error),
26
27 #[error("invalid YAML: {0}")]
29 InvalidYaml(#[from] serde_yml::Error),
30
31 #[error("missing required field: {0}")]
33 MissingField(String),
34
35 #[error("unsupported OpenAPI version: {0}")]
37 UnsupportedVersion(String),
38
39 #[error("unresolved reference: {0}")]
41 UnresolvedRef(String),
42}
43
44pub type Result<T> = std::result::Result<T, OpenApiError>;
46
47pub fn tools_from_spec(input: &str) -> Result<Vec<chio_core_types::ToolDefinition>> {
53 let spec = OpenApiSpec::parse(input)?;
54 let generator = ManifestGenerator::new(GeneratorConfig::default());
55 Ok(generator.generate_tools(&spec))
56}