Skip to main content

oag_core/parse/
mod.rs

1pub mod components;
2pub mod media_type;
3pub mod operation;
4pub mod parameter;
5pub mod ref_resolve;
6pub mod request_body;
7pub mod response;
8pub mod schema;
9pub mod security;
10pub mod server;
11pub mod spec;
12
13use crate::error::ParseError;
14use spec::OpenApiSpec;
15
16/// Parse an OpenAPI spec from YAML.
17pub fn from_yaml(input: &str) -> Result<OpenApiSpec, ParseError> {
18    let spec: OpenApiSpec = serde_yaml_ng::from_str(input)?;
19    validate_version(&spec)?;
20    Ok(spec)
21}
22
23/// Parse an OpenAPI spec from JSON.
24pub fn from_json(input: &str) -> Result<OpenApiSpec, ParseError> {
25    let spec: OpenApiSpec = serde_json::from_str(input)?;
26    validate_version(&spec)?;
27    Ok(spec)
28}
29
30fn validate_version(spec: &OpenApiSpec) -> Result<(), ParseError> {
31    if !spec.openapi.starts_with("3.") {
32        return Err(ParseError::UnsupportedVersion(spec.openapi.clone()));
33    }
34    Ok(())
35}