async-graphql/src/scalars/datetime.rs

26 lines
643 B
Rust
Raw Normal View History

2020-03-24 10:54:22 +00:00
use crate::{impl_scalar_internal, JsonWriter, Result, Scalar, Value};
2020-03-01 10:54:34 +00:00
use chrono::{DateTime, TimeZone, Utc};
2020-03-20 03:56:08 +00:00
/// Implement the DateTime<Utc> scalar
///
/// The input/output is a string in RFC3339 format.
2020-03-19 09:20:12 +00:00
impl Scalar for DateTime<Utc> {
2020-03-01 10:54:34 +00:00
fn type_name() -> &'static str {
"DateTime"
}
2020-03-04 02:38:07 +00:00
fn parse(value: &Value) -> Option<Self> {
2020-03-01 10:54:34 +00:00
match value {
2020-03-03 11:15:18 +00:00
Value::String(s) => Some(Utc.datetime_from_str(&s, "%+").ok()?),
_ => None,
2020-03-01 10:54:34 +00:00
}
}
2020-03-24 10:54:22 +00:00
fn to_json(&self, w: &mut JsonWriter) -> Result<()> {
w.string(&self.to_rfc3339());
Ok(())
2020-03-01 10:54:34 +00:00
}
}
2020-03-06 15:58:43 +00:00
2020-03-09 10:05:52 +00:00
impl_scalar_internal!(DateTime<Utc>);