diff --git a/src/scalars/id.rs b/src/scalars/id.rs index a2cf55fe..02802645 100644 --- a/src/scalars/id.rs +++ b/src/scalars/id.rs @@ -1,5 +1,6 @@ use crate::{Result, ScalarType, Value}; use async_graphql_derive::Scalar; +use bson::oid::{self, ObjectId}; use std::convert::TryInto; use std::num::ParseIntError; use std::ops::{Deref, DerefMut}; @@ -77,6 +78,20 @@ impl TryInto for ID { } } +impl From for ID { + fn from(object_id: ObjectId) -> ID { + ID(object_id.to_hex()) + } +} + +impl TryInto for ID { + type Error = oid::Error; + + fn try_into(self) -> std::result::Result { + ObjectId::with_string(&self.0) + } +} + impl PartialEq<&str> for ID { fn eq(&self, other: &&str) -> bool { self.0.as_str() == *other