schemars/json_schema_impls/
chrono.rs1use crate::r#gen::SchemaGenerator;
2use crate::schema::*;
3use crate::JsonSchema;
4use chrono::prelude::*;
5use serde_json::json;
6use std::borrow::Cow;
7
8impl JsonSchema for Weekday {
9 no_ref_schema!();
10
11 fn schema_name() -> String {
12 "Weekday".to_owned()
13 }
14
15 fn schema_id() -> Cow<'static, str> {
16 Cow::Borrowed("chrono::Weekday")
17 }
18
19 fn json_schema(_: &mut SchemaGenerator) -> Schema {
20 SchemaObject {
21 instance_type: Some(InstanceType::String.into()),
22 enum_values: Some(vec![
23 json!("Mon"),
24 json!("Tue"),
25 json!("Wed"),
26 json!("Thu"),
27 json!("Fri"),
28 json!("Sat"),
29 json!("Sun"),
30 ]),
31 ..Default::default()
32 }
33 .into()
34 }
35}
36
37macro_rules! formatted_string_impl {
38 ($ty:ident, $format:literal) => {
39 formatted_string_impl!($ty, $format, JsonSchema for $ty);
40 };
41 ($ty:ident, $format:literal, $($desc:tt)+) => {
42 impl $($desc)+ {
43 no_ref_schema!();
44
45 fn schema_name() -> String {
46 stringify!($ty).to_owned()
47 }
48
49 fn schema_id() -> Cow<'static, str> {
50 Cow::Borrowed(stringify!(chrono::$ty))
51 }
52
53 fn json_schema(_: &mut SchemaGenerator) -> Schema {
54 SchemaObject {
55 instance_type: Some(InstanceType::String.into()),
56 format: Some($format.to_owned()),
57 ..Default::default()
58 }
59 .into()
60 }
61 }
62 };
63}
64
65formatted_string_impl!(NaiveDate, "date");
66formatted_string_impl!(NaiveDateTime, "partial-date-time");
67formatted_string_impl!(NaiveTime, "partial-date-time");
68formatted_string_impl!(DateTime, "date-time", <Tz: TimeZone> JsonSchema for DateTime<Tz>);