use crate::v31;
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct PathItem {
#[serde(rename = "summary", skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
#[serde(rename = "description", skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(rename = "servers", skip_serializing_if = "Option::is_none")]
pub servers: Option<Vec<v31::Server>>,
#[serde(rename = "parameters", skip_serializing_if = "Option::is_none")]
pub parameters: Option<Vec<v31::ObjectOrRef<v31::Parameter>>>,
#[serde(rename = "get", skip_serializing_if = "Option::is_none")]
pub get: Option<Box<v31::Operation>>,
#[serde(rename = "put", skip_serializing_if = "Option::is_none")]
pub put: Option<Box<v31::Operation>>,
#[serde(rename = "post", skip_serializing_if = "Option::is_none")]
pub post: Option<Box<v31::Operation>>,
#[serde(rename = "delete", skip_serializing_if = "Option::is_none")]
pub delete: Option<Box<v31::Operation>>,
#[serde(rename = "options", skip_serializing_if = "Option::is_none")]
pub options: Option<Box<v31::Operation>>,
#[serde(rename = "head", skip_serializing_if = "Option::is_none")]
pub head: Option<Box<v31::Operation>>,
#[serde(rename = "patch", skip_serializing_if = "Option::is_none")]
pub patch: Option<Box<v31::Operation>>,
#[serde(rename = "trace", skip_serializing_if = "Option::is_none")]
pub trace: Option<Box<v31::Operation>>,
}
impl PathItem {
pub fn new() -> PathItem {
PathItem {
summary: None,
description: None,
servers: None,
parameters: None,
get: None,
put: None,
post: None,
delete: None,
options: None,
head: None,
patch: None,
trace: None,
}
}
pub fn into_operations(&self) -> impl Iterator<Item = (String, v31::Operation)> {
let methods = [
("GET", self.get.as_deref()),
("PUT", self.put.as_deref()),
("POST", self.post.as_deref()),
("DELETE", self.delete.as_deref()),
("OPTIONS", self.options.as_deref()),
("HEAD", self.head.as_deref()),
("PATCH", self.patch.as_deref()),
("TRACE", self.trace.as_deref()),
];
methods
.iter()
.filter_map(|(method, operation)| {
operation.map(|op| {
let mut op = op.clone();
op.servers = [op.servers, self.servers.clone()].into_iter().flatten().reduce(|mut v1, mut v2| {
v1.append(&mut v2);
v1
});
op.parameters = [op.parameters, self.parameters.clone()].into_iter().flatten().reduce(|mut v1, mut v2| {
v1.append(&mut v2);
v1
});
(method.to_string(), op)
})
})
.collect::<Vec<_>>()
.into_iter()
}
}