use serde::{Deserialize, Serialize};
use crate::{
Map,
model::{
extensions::Extensions,
parameter::{header::Header, style::EncodingStyle},
reference::RefOr,
},
};
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct Encoding {
#[serde(
rename = "contentType",
default,
skip_serializing_if = "Option::is_none"
)]
pub content_type: Option<String>,
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub headers: Map<RefOr<Header>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub style: Option<EncodingStyle>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub explode: Option<bool>,
#[serde(
rename = "allowReserved",
default,
skip_serializing_if = "Option::is_none"
)]
pub allow_reserved: Option<bool>,
#[cfg(feature = "openapi32")]
#[serde(default, skip_serializing_if = "Map::is_empty")]
pub encoding: Map<Encoding>,
#[cfg(feature = "openapi32")]
#[serde(
rename = "prefixEncoding",
default,
skip_serializing_if = "Option::is_none"
)]
pub prefix_encoding: Option<Vec<Encoding>>,
#[cfg(feature = "openapi32")]
#[serde(
rename = "itemEncoding",
default,
skip_serializing_if = "Option::is_none"
)]
pub item_encoding: Option<Box<Encoding>>,
#[serde(flatten)]
pub extensions: Extensions,
}
impl Encoding {
pub fn new(content_type: impl Into<String>) -> Self {
Self {
content_type: Some(content_type.into()),
..Self::default()
}
}
#[must_use]
pub fn with_header(mut self, name: impl Into<String>, header: Header) -> Self {
self.headers.insert(name.into(), RefOr::Item(header));
self
}
}