Skip to main content

openapi_nexus/parser/
mod.rs

1pub mod error;
2#[allow(clippy::module_inception)]
3pub mod parser;
4pub mod serde_error;
5
6pub use error::ParseError;
7pub use parser::{
8    parse_content_json, parse_content_json_v31, parse_content_yaml, parse_content_yaml_v31,
9    parse_file,
10};
11pub use serde_error::SerdeErrorExtractor;
12
13use crate::spec::{OpenApiV30Spec, OpenApiV31Spec, OpenApiV32Spec};
14
15#[derive(Debug)]
16pub enum ParsedSpec {
17    V30(Box<OpenApiV30Spec>),
18    V31(Box<OpenApiV31Spec>),
19    V32(Box<OpenApiV32Spec>),
20}
21
22impl ParsedSpec {
23    pub fn version_tag(&self) -> &'static str {
24        match self {
25            ParsedSpec::V30(_) => "3.0",
26            ParsedSpec::V31(_) => "3.1",
27            ParsedSpec::V32(_) => "3.2",
28        }
29    }
30
31    pub fn as_v32(&self) -> Option<&OpenApiV32Spec> {
32        match self {
33            ParsedSpec::V32(spec) => Some(spec),
34            _ => None,
35        }
36    }
37
38    pub fn as_v31(&self) -> Option<&OpenApiV31Spec> {
39        match self {
40            ParsedSpec::V31(spec) => Some(spec),
41            _ => None,
42        }
43    }
44
45    pub fn as_v30(&self) -> Option<&OpenApiV30Spec> {
46        match self {
47            ParsedSpec::V30(spec) => Some(spec),
48            _ => None,
49        }
50    }
51}