openapi_31/v31/
openapi.rs

1// OpenAPI v3.1.0 Specification
2//
3// OpenAPI inside OpenAPI
4//
5// The version of the OpenAPI document: 3.1.0
6//
7// Generated by: https://openapi-generator.tech
8
9use 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}