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
16pub 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
23pub 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}