openapi_31/v31/
path_item.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 PathItem {
13  #[serde(rename = "summary", skip_serializing_if = "Option::is_none")]
14  pub summary: Option<String>,
15  #[serde(rename = "description", skip_serializing_if = "Option::is_none")]
16  pub description: Option<String>,
17  #[serde(rename = "servers", skip_serializing_if = "Option::is_none")]
18  pub servers: Option<Vec<v31::Server>>,
19  #[serde(rename = "parameters", skip_serializing_if = "Option::is_none")]
20  pub parameters: Option<Vec<v31::ObjectOrRef<v31::Parameter>>>,
21  #[serde(rename = "get", skip_serializing_if = "Option::is_none")]
22  pub get: Option<Box<v31::Operation>>,
23  #[serde(rename = "put", skip_serializing_if = "Option::is_none")]
24  pub put: Option<Box<v31::Operation>>,
25  #[serde(rename = "post", skip_serializing_if = "Option::is_none")]
26  pub post: Option<Box<v31::Operation>>,
27  #[serde(rename = "delete", skip_serializing_if = "Option::is_none")]
28  pub delete: Option<Box<v31::Operation>>,
29  #[serde(rename = "options", skip_serializing_if = "Option::is_none")]
30  pub options: Option<Box<v31::Operation>>,
31  #[serde(rename = "head", skip_serializing_if = "Option::is_none")]
32  pub head: Option<Box<v31::Operation>>,
33  #[serde(rename = "patch", skip_serializing_if = "Option::is_none")]
34  pub patch: Option<Box<v31::Operation>>,
35  #[serde(rename = "trace", skip_serializing_if = "Option::is_none")]
36  pub trace: Option<Box<v31::Operation>>,
37}
38
39impl PathItem {
40  pub fn new() -> PathItem {
41    PathItem {
42      summary: None,
43      description: None,
44      servers: None,
45      parameters: None,
46      get: None,
47      put: None,
48      post: None,
49      delete: None,
50      options: None,
51      head: None,
52      patch: None,
53      trace: None,
54    }
55  }
56
57  pub fn into_operations(&self) -> impl Iterator<Item = (String, v31::Operation)> {
58    let methods = [
59      ("GET", self.get.as_deref()),
60      ("PUT", self.put.as_deref()),
61      ("POST", self.post.as_deref()),
62      ("DELETE", self.delete.as_deref()),
63      ("OPTIONS", self.options.as_deref()),
64      ("HEAD", self.head.as_deref()),
65      ("PATCH", self.patch.as_deref()),
66      ("TRACE", self.trace.as_deref()),
67    ];
68
69    methods
70      .iter()
71      .filter_map(|(method, operation)| {
72        operation.map(|op| {
73          let mut op = op.clone();
74          op.servers = [op.servers, self.servers.clone()].into_iter().flatten().reduce(|mut v1, mut v2| {
75            v1.append(&mut v2);
76            v1
77          });
78          op.parameters = [op.parameters, self.parameters.clone()].into_iter().flatten().reduce(|mut v1, mut v2| {
79            v1.append(&mut v2);
80            v1
81          });
82          (method.to_string(), op)
83        })
84      })
85      .collect::<Vec<_>>()
86      .into_iter()
87  }
88}