use crate::*;
use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct ParameterData {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "is_false")]
pub required: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub deprecated: Option<bool>,
#[serde(flatten)]
pub format: ParameterSchemaOrContent,
#[serde(skip_serializing_if = "Option::is_none")]
pub example: Option<serde_json::Value>,
#[serde(default, skip_serializing_if = "IndexMap::is_empty")]
pub examples: IndexMap<String, ReferenceOr<Example>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub explode: Option<bool>,
#[serde(flatten)]
pub extensions: IndexMap<String, serde_json::Value>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum ParameterSchemaOrContent {
#[serde(rename = "schema")]
Schema(ReferenceOr<Schema>),
#[serde(rename = "content")]
Content(Content),
}
pub type Content = IndexMap<String, MediaType>;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(tag = "in")]
pub enum Parameter {
#[serde(rename = "query")]
Query {
#[serde(flatten)]
parameter_data: ParameterData,
#[serde(default)]
#[serde(rename = "allowReserved", skip_serializing_if = "is_false")]
allow_reserved: bool,
#[serde(default, skip_serializing_if = "SkipSerializeIfDefault::skip")]
style: QueryStyle,
#[serde(rename = "allowEmptyValue", skip_serializing_if = "Option::is_none")]
allow_empty_value: Option<bool>,
},
#[serde(rename = "header")]
Header {
#[serde(flatten)]
parameter_data: ParameterData,
#[serde(default, skip_serializing_if = "SkipSerializeIfDefault::skip")]
style: HeaderStyle,
},
#[serde(rename = "path")]
Path {
#[serde(flatten)]
parameter_data: ParameterData,
#[serde(default, skip_serializing_if = "SkipSerializeIfDefault::skip")]
style: PathStyle,
},
#[serde(rename = "cookie")]
Cookie {
#[serde(flatten)]
parameter_data: ParameterData,
#[serde(default, skip_serializing_if = "SkipSerializeIfDefault::skip")]
style: CookieStyle,
},
}
struct SkipSerializeIfDefault;
impl SkipSerializeIfDefault {
#[cfg(feature = "skip_serializing_defaults")]
fn skip<D: Default + std::cmp::PartialEq>(value: &D) -> bool {
value == &Default::default()
}
#[cfg(not(feature = "skip_serializing_defaults"))]
fn skip<D: Default + std::cmp::PartialEq>(_value: &D) -> bool {
false
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum PathStyle {
#[serde(rename = "matrix")]
Matrix,
#[serde(rename = "label")]
Label,
#[serde(rename = "simple")]
Simple,
}
impl Default for PathStyle {
fn default() -> Self {
PathStyle::Simple
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum QueryStyle {
#[serde(rename = "form")]
Form,
#[serde(rename = "spaceDelimited")]
SpaceDelimited,
#[serde(rename = "pipeDelimited")]
PipeDelimited,
#[serde(rename = "deepObject")]
DeepObject,
}
impl Default for QueryStyle {
fn default() -> Self {
QueryStyle::Form
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum CookieStyle {
#[serde(rename = "form")]
Form,
}
impl Default for CookieStyle {
fn default() -> CookieStyle {
CookieStyle::Form
}
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub enum HeaderStyle {
#[serde(rename = "simple")]
Simple,
}
impl Default for HeaderStyle {
fn default() -> HeaderStyle {
HeaderStyle::Simple
}
}