pub mod encoding;
pub mod media_type;
pub mod mime_names;
use serde::{Deserialize, Serialize};
use crate::{
Map,
model::{body::media_type::MediaType, extensions::Extensions, schema::Schema},
};
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct RequestBody {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub content: Map<MediaType>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub required: Option<bool>,
#[serde(flatten)]
pub extensions: Extensions,
}
impl RequestBody {
pub fn new(media_type: impl Into<String>, content: MediaType) -> Self {
let mut map = Map::new();
map.insert(media_type.into(), content);
Self {
content: map,
required: Some(true),
..Self::default()
}
}
#[must_use]
pub fn json(schema: Schema) -> Self {
Self::new(mime_names::APPLICATION_JSON, MediaType::new(schema))
}
#[must_use]
pub fn with_media_type(mut self, media_type: impl Into<String>, content: MediaType) -> Self {
self.content.insert(media_type.into(), content);
self
}
#[must_use]
pub fn optional(mut self) -> Self {
self.required = Some(false);
self
}
#[must_use]
pub fn with_description(mut self, description: impl Into<String>) -> Self {
self.description = Some(description.into());
self
}
}
#[cfg(test)]
mod tests;