Impl Scalar for NaiveDate and NaiveTime
This commit is contained in:
parent
6de85377f7
commit
ae85517976
|
@ -6,6 +6,8 @@ mod floats;
|
||||||
mod id;
|
mod id;
|
||||||
mod integers;
|
mod integers;
|
||||||
mod json;
|
mod json;
|
||||||
|
mod naive_date;
|
||||||
|
mod naive_time;
|
||||||
mod string;
|
mod string;
|
||||||
mod url;
|
mod url;
|
||||||
|
|
||||||
|
@ -23,7 +25,7 @@ mod tests {
|
||||||
use super::ID;
|
use super::ID;
|
||||||
use crate::Type;
|
use crate::Type;
|
||||||
use bson::oid::ObjectId;
|
use bson::oid::ObjectId;
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, NaiveDate, NaiveTime, Utc};
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -46,6 +48,12 @@ mod tests {
|
||||||
assert_eq!(<ID as Type>::type_name(), "ID");
|
assert_eq!(<ID as Type>::type_name(), "ID");
|
||||||
assert_eq!(<ID as Type>::qualified_type_name(), "ID!");
|
assert_eq!(<ID as Type>::qualified_type_name(), "ID!");
|
||||||
|
|
||||||
|
assert_eq!(<NaiveDate as Type>::type_name(), "NaiveDate");
|
||||||
|
assert_eq!(<NaiveDate as Type>::qualified_type_name(), "NaiveDate!");
|
||||||
|
|
||||||
|
assert_eq!(<NaiveTime as Type>::type_name(), "NaiveTime");
|
||||||
|
assert_eq!(<NaiveTime as Type>::qualified_type_name(), "NaiveTime!");
|
||||||
|
|
||||||
assert_eq!(<DateTime::<Utc> as Type>::type_name(), "DateTime");
|
assert_eq!(<DateTime::<Utc> as Type>::type_name(), "DateTime");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
<DateTime::<Utc> as Type>::qualified_type_name(),
|
<DateTime::<Utc> as Type>::qualified_type_name(),
|
||||||
|
|
22
src/scalars/naive_date.rs
Normal file
22
src/scalars/naive_date.rs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
use crate::{InputValueError, InputValueResult, Result, ScalarType, Value};
|
||||||
|
use async_graphql_derive::Scalar;
|
||||||
|
use chrono::NaiveDate;
|
||||||
|
|
||||||
|
/// Implement the NaiveDate scalar
|
||||||
|
#[Scalar(internal)]
|
||||||
|
impl ScalarType for NaiveDate {
|
||||||
|
fn type_name() -> &'static str {
|
||||||
|
"NaiveDate"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse(value: Value) -> InputValueResult<Self> {
|
||||||
|
match value {
|
||||||
|
Value::String(s) => Ok(NaiveDate::parse_from_str(&s, "%Y-%m-%d")?),
|
||||||
|
_ => Err(InputValueError::ExpectedType(value)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_json(&self) -> Result<serde_json::Value> {
|
||||||
|
Ok(self.format("%Y-%m-%d").to_string().into())
|
||||||
|
}
|
||||||
|
}
|
22
src/scalars/naive_time.rs
Normal file
22
src/scalars/naive_time.rs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
use crate::{InputValueError, InputValueResult, Result, ScalarType, Value};
|
||||||
|
use async_graphql_derive::Scalar;
|
||||||
|
use chrono::NaiveTime;
|
||||||
|
|
||||||
|
/// Implement the NaiveTime scalar
|
||||||
|
#[Scalar(internal)]
|
||||||
|
impl ScalarType for NaiveTime {
|
||||||
|
fn type_name() -> &'static str {
|
||||||
|
"NaiveTime"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse(value: Value) -> InputValueResult<Self> {
|
||||||
|
match value {
|
||||||
|
Value::String(s) => Ok(NaiveTime::parse_from_str(&s, "%H:%M:%S")?),
|
||||||
|
_ => Err(InputValueError::ExpectedType(value)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_json(&self) -> Result<serde_json::Value> {
|
||||||
|
Ok(self.format("%H:%M:%S").to_string().into())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user