diff --git a/src/types/external/bson.rs b/src/types/external/bson.rs index 2686d049..b48f931d 100644 --- a/src/types/external/bson.rs +++ b/src/types/external/bson.rs @@ -2,6 +2,8 @@ use bson::{oid::ObjectId, Bson, Document}; #[cfg(feature = "chrono")] use bson::DateTime as UtcDateTime; +#[cfg(feature = "bson-uuid")] +use bson::Uuid; #[cfg(feature = "chrono")] use chrono::{DateTime, Utc}; @@ -21,6 +23,21 @@ impl ScalarType for ObjectId { } } +#[cfg(feature = "bson-uuid")] +#[Scalar(internal, name = "UUID")] +impl ScalarType for Uuid { + fn parse(value: Value) -> InputValueResult { + match value { + Value::String(s) => Ok(Uuid::parse_str(&s)?), + _ => Err(InputValueError::expected_type(value)), + } + } + + fn to_value(&self) -> Value { + Value::String(self.to_string()) + } +} + #[cfg(feature = "chrono")] #[Scalar(internal, name = "DateTime")] impl ScalarType for UtcDateTime {