paperclip_core/v3/models/
request_body.rs

1use super::{invalid_referenceor, non_body_parameter_to_v3_parameter, v2, Either};
2
3impl From<v2::DefaultParameterRaw>
4    for Either<openapiv3::Parameter, Either<openapiv3::RequestBody, Option<openapiv3::Schema>>>
5{
6    fn from(v2: v2::DefaultParameterRaw) -> Self {
7        let parameter_data = |schema: Option<openapiv3::Schema>| openapiv3::ParameterData {
8            name: v2.name.clone(),
9            description: v2.description.clone(),
10            required: v2.required,
11            deprecated: None,
12            format: match &schema {
13                Some(schema) => openapiv3::ParameterSchemaOrContent::Schema(
14                    openapiv3::ReferenceOr::Item(schema.clone()),
15                ),
16                None => openapiv3::ParameterSchemaOrContent::Schema(invalid_referenceor(format!(
17                    "No Schema found: {:?}",
18                    v2
19                ))),
20            },
21            example: None,
22            examples: Default::default(),
23            explode: None,
24            extensions: Default::default(),
25        };
26
27        match v2.in_ {
28            v2::ParameterIn::Query => Either::Left(openapiv3::Parameter::Query {
29                parameter_data: parameter_data(non_body_parameter_to_v3_parameter(false, &v2)),
30                allow_reserved: false,
31                style: Default::default(),
32                allow_empty_value: None,
33            }),
34            v2::ParameterIn::Header => Either::Left(openapiv3::Parameter::Header {
35                parameter_data: parameter_data(non_body_parameter_to_v3_parameter(false, &v2)),
36                style: Default::default(),
37            }),
38            v2::ParameterIn::Path => Either::Left(openapiv3::Parameter::Path {
39                parameter_data: parameter_data(non_body_parameter_to_v3_parameter(false, &v2)),
40                style: Default::default(),
41            }),
42            v2::ParameterIn::FormData => {
43                Either::Right(Either::Right(non_body_parameter_to_v3_parameter(true, &v2)))
44            }
45            v2::ParameterIn::Body => Either::Right(Either::Left(openapiv3::RequestBody {
46                description: v2.description,
47                content: {
48                    let media = openapiv3::MediaType {
49                        schema: v2.schema.map(|s| s.into()),
50                        ..Default::default()
51                    };
52                    let mut map = openapiv3::RequestBody::default().content;
53                    map.insert(v2::SpecFormat::Json.mime().0.to_string(), media);
54                    map
55                },
56                required: v2.required,
57                extensions: Default::default(),
58            })),
59        }
60    }
61}