1#![forbid(unsafe_code)]
9
10mod extensions;
11mod generator;
12mod parser;
13mod policy;
14
15pub use extensions::{ChioExtensions, Sensitivity};
16pub use generator::{GeneratorConfig, ManifestGenerator};
17pub use parser::{OpenApiSpec, Operation, Parameter, ParameterLocation, PathItem};
18pub use policy::{DefaultPolicy, PolicyDecision};
19
20use thiserror::Error;
21
22#[derive(Debug, Error)]
24pub enum OpenApiError {
25 #[error("invalid JSON: {0}")]
27 InvalidJson(#[from] serde_json::Error),
28
29 #[error("invalid YAML: {0}")]
31 InvalidYaml(#[from] serde_yaml::Error),
32
33 #[error("missing required field: {0}")]
35 MissingField(String),
36
37 #[error("unsupported OpenAPI version: {0}")]
39 UnsupportedVersion(String),
40
41 #[error("unresolved reference: {0}")]
43 UnresolvedRef(String),
44
45 #[error("invalid OpenAPI spec: {0}")]
47 InvalidSpec(String),
48}
49
50pub type Result<T> = std::result::Result<T, OpenApiError>;
52
53pub fn tools_from_spec(input: &str) -> Result<Vec<chio_core_types::ToolDefinition>> {
59 let spec = OpenApiSpec::parse(input)?;
60 let generator = ManifestGenerator::new(GeneratorConfig::default());
61 Ok(generator.generate_tools(&spec))
62}