openapi_31/v31/
path_item.rs1use 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}