kynos_openapi/model/body/
mod.rs1pub mod encoding;
4pub mod media_type;
5pub mod mime_names;
6
7use serde::{Deserialize, Serialize};
8
9use crate::{
10 Map,
11 model::{body::media_type::MediaType, extensions::Extensions, schema::Schema},
12};
13
14#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
16pub struct RequestBody {
17 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub description: Option<String>,
22
23 pub content: Map<MediaType>,
28
29 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub required: Option<bool>,
32
33 #[serde(flatten)]
35 pub extensions: Extensions,
36}
37
38impl RequestBody {
39 pub fn new(media_type: impl Into<String>, content: MediaType) -> Self {
41 let mut map = Map::new();
42 map.insert(media_type.into(), content);
43 Self {
44 content: map,
45 required: Some(true),
46 ..Self::default()
47 }
48 }
49
50 #[must_use]
52 pub fn json(schema: Schema) -> Self {
53 Self::new(mime_names::APPLICATION_JSON, MediaType::new(schema))
54 }
55
56 #[must_use]
58 pub fn with_media_type(mut self, media_type: impl Into<String>, content: MediaType) -> Self {
59 self.content.insert(media_type.into(), content);
60 self
61 }
62
63 #[must_use]
65 pub fn optional(mut self) -> Self {
66 self.required = Some(false);
67 self
68 }
69
70 #[must_use]
72 pub fn with_description(mut self, description: impl Into<String>) -> Self {
73 self.description = Some(description.into());
74 self
75 }
76}
77
78#[cfg(test)]
79mod tests;