poem_openapi/types/external/
bool.rs1use std::borrow::Cow;
2
3use poem::{http::HeaderValue, web::Field};
4use serde_json::Value;
5
6use crate::{
7 registry::{MetaSchema, MetaSchemaRef},
8 types::{
9 ParseError, ParseFromJSON, ParseFromMultipartField, ParseFromParameter, ParseResult,
10 ToHeader, ToJSON, Type,
11 },
12};
13
14impl Type for bool {
15 const IS_REQUIRED: bool = true;
16
17 type RawValueType = Self;
18
19 type RawElementValueType = Self;
20
21 fn name() -> Cow<'static, str> {
22 "boolean".into()
23 }
24
25 fn schema_ref() -> MetaSchemaRef {
26 MetaSchemaRef::Inline(Box::new(MetaSchema::new("boolean")))
27 }
28
29 fn as_raw_value(&self) -> Option<&Self::RawValueType> {
30 Some(self)
31 }
32
33 fn raw_element_iter<'a>(
34 &'a self,
35 ) -> Box<dyn Iterator<Item = &'a Self::RawElementValueType> + 'a> {
36 Box::new(self.as_raw_value().into_iter())
37 }
38}
39
40impl ParseFromJSON for bool {
41 fn parse_from_json(value: Option<Value>) -> ParseResult<Self> {
42 let value = value.unwrap_or_default();
43 if let Value::Bool(value) = value {
44 Ok(value)
45 } else {
46 Err(ParseError::expected_type(value))
47 }
48 }
49}
50
51impl ParseFromParameter for bool {
52 fn parse_from_parameter(value: &str) -> ParseResult<Self> {
53 value.parse().map_err(ParseError::custom)
54 }
55}
56
57impl ParseFromMultipartField for bool {
58 async fn parse_from_multipart(field: Option<Field>) -> ParseResult<Self> {
59 match field {
60 Some(field) => Ok(field.text().await?.parse()?),
61 None => Err(ParseError::expected_input()),
62 }
63 }
64}
65
66impl ToJSON for bool {
67 fn to_json(&self) -> Option<Value> {
68 Some(Value::Bool(*self))
69 }
70}
71
72impl ToHeader for bool {
73 fn to_header(&self) -> Option<HeaderValue> {
74 match self {
75 true => Some(HeaderValue::from_static("true")),
76 false => Some(HeaderValue::from_static("false")),
77 }
78 }
79}