openapi_31/v31/
openapi.rs1use crate::v31;
10
11#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
12pub struct Openapi {
13 #[serde(rename = "openapi", deserialize_with = "Option::deserialize")]
14 pub openapi: Option<serde_json::Value>,
15 #[serde(rename = "info")]
16 pub info: Box<v31::Info>,
17 #[serde(rename = "jsonSchemaDialect", default, skip_serializing_if = "Option::is_none")]
18 pub json_schema_dialect: Option<serde_json::Value>,
19 #[serde(rename = "servers", default, skip_serializing_if = "Option::is_none")]
20 pub servers: Option<Vec<v31::Server>>,
21 #[serde(rename = "paths", default, skip_serializing_if = "std::collections::BTreeMap::is_empty")]
22 pub paths: std::collections::BTreeMap<String, v31::ObjectOrRef<v31::PathItem>>,
23 #[serde(rename = "webhooks", default, skip_serializing_if = "std::collections::BTreeMap::is_empty")]
24 pub webhooks: std::collections::BTreeMap<String, v31::ObjectOrRef<v31::PathItem>>,
25 #[serde(rename = "components", skip_serializing_if = "Option::is_none")]
26 pub components: Option<Box<v31::Components>>,
27 #[serde(rename = "security", default, skip_serializing_if = "Option::is_none")]
28 pub security: Option<serde_json::Value>,
29 #[serde(rename = "tags", default, skip_serializing_if = "Option::is_none")]
30 pub tags: Option<Vec<v31::Tag>>,
31 #[serde(rename = "externalDocs", skip_serializing_if = "Option::is_none")]
32 pub external_docs: Option<Box<v31::ExternalDocumentation>>,
33}
34
35impl Openapi {
36 pub fn new(openapi: Option<serde_json::Value>, info: v31::Info) -> Openapi {
37 Openapi {
38 openapi,
39 info: Box::new(info),
40 json_schema_dialect: None,
41 servers: None,
42 paths: std::collections::BTreeMap::default(),
43 webhooks: std::collections::BTreeMap::default(),
44 components: None,
45 security: None,
46 tags: None,
47 external_docs: None,
48 }
49 }
50
51 pub fn into_operations(&self) -> impl Iterator<Item = (String, String, v31::Operation)> {
52 self
53 .paths
54 .iter()
55 .filter_map(|(path, path_item_ref)| path_item_ref.resolve(self).ok().map(|path_item| (path, path_item)))
56 .flat_map(|(path, path_item)| {
57 path_item.into_operations().map(|(method, operation)| (path.clone(), method, operation))
58 })
59 .collect::<Vec<_>>()
60 .into_iter()
61 .chain(
62 self
63 .webhooks
64 .iter()
65 .filter_map(|(path, path_item_ref)| path_item_ref.resolve(self).ok().map(|path_item| (path, path_item)))
66 .flat_map(|(path, path_item)| {
67 path_item.into_operations().map(|(method, operation)| (path.clone(), method, operation))
68 })
69 .collect::<Vec<_>>(),
70 )
71 }
72}