restify_openapi/
simple.rs

1use crate::ApiComponent;
2
3macro_rules! simple_modifier {
4  ($($ty:ty),*) => {
5    $(
6      impl ApiComponent for $ty {
7        fn child_schemas() -> Vec<(String, $crate::reference_or::ReferenceOr<$crate::Schema>)> {
8          vec![]
9        }
10        fn raw_schema() -> Option<$crate::reference_or::ReferenceOr<$crate::Schema>> {
11          let gen = schemars::gen::SchemaSettings::openapi3().into_generator();
12
13          let schema: $crate::reference_or::ReferenceOr<$crate::Schema> =
14            $crate::Schema::Object(gen.into_root_schema_for::<$ty>().schema).into();
15          Some(schema)
16        }
17        fn schema() -> Option<(String, $crate::reference_or::ReferenceOr<$crate::Schema>)> {
18          None
19        }
20      }
21    )*
22  };
23}
24
25simple_modifier!(
26  char, String, bool, f32, f64, i8, i16, i32, u8, u16, u32, i64, i128, isize, u64, u128, usize
27);
28
29#[cfg(feature = "chrono")]
30simple_modifier!(chrono::NaiveDate, chrono::NaiveTime, chrono::NaiveDateTime);
31#[cfg(feature = "rust_decimal")]
32simple_modifier!(rust_decimal::Decimal);
33#[cfg(feature = "uuid")]
34simple_modifier!(uuid::Uuid);
35#[cfg(feature = "url")]
36simple_modifier!(url::Url);
37
38#[cfg(feature = "chrono")]
39impl<T: chrono::TimeZone> ApiComponent for chrono::DateTime<T> {
40  fn child_schemas() -> Vec<(String, crate::reference_or::ReferenceOr<crate::Schema>)> {
41    vec![]
42  }
43
44  fn raw_schema() -> Option<crate::reference_or::ReferenceOr<crate::Schema>> {
45    let gen = schemars::gen::SchemaSettings::openapi3().into_generator();
46
47    let schema: crate::reference_or::ReferenceOr<crate::Schema> =
48      crate::Schema::Object(gen.into_root_schema_for::<chrono::DateTime<T>>().schema).into();
49    Some(schema)
50  }
51
52  fn schema() -> Option<(String, crate::reference_or::ReferenceOr<crate::Schema>)> {
53    None
54  }
55}