datetime-default 1.1.1

Provide NewType of Datetime that overrides the default value.
Documentation
use chrono::{DateTime, TimeZone};
use schemars::{gen::SchemaGenerator, schema::Schema, JsonSchema};

use crate::DateTimeDefaultNow;

impl<Tz, const OFFSET_HOURS: i32> JsonSchema for DateTimeDefaultNow<Tz, OFFSET_HOURS>
where
    Tz: TimeZone,
    <Tz as TimeZone>::Offset: Copy,
{
    fn schema_name() -> String {
        DateTime::<Tz>::schema_name()
    }

    fn json_schema(gen: &mut SchemaGenerator) -> Schema {
        DateTime::<Tz>::json_schema(gen)
    }
}

#[cfg(test)]
mod test {
    use chrono::FixedOffset;
    use schemars::schema_for;
    use serde_json::json;

    use crate::DateTimeDefaultNow;

    #[test]
    fn schemas_test() {
        #[allow(dead_code)]
        #[derive(Default, schemars::JsonSchema)]
        struct A {
            update_at: DateTimeDefaultNow<FixedOffset>,
        }

        let schema = schema_for!(A);
        assert_eq!(
            serde_json::to_value(&schema).unwrap(),
            json!(
                {
                    "$schema": "http://json-schema.org/draft-07/schema#",
                    "title": "A",
                    "type": "object",
                    "required": [
                        "update_at"
                    ],
                    "properties": {
                        "update_at": {
                            "$ref": "#/definitions/DateTime"
                        }
                    },
                    "definitions": {
                        "DateTime": {
                            "type": "string",
                            "format": "date-time"
                        }
                    }
                }
            )
        );
    }
}