juniper/integrations/
uuid.rs1#![allow(clippy::needless_lifetimes)]
4
5use crate::{graphql_scalar, InputValue, ScalarValue, Value};
6
7#[graphql_scalar(with = uuid_scalar, parse_token(String))]
8type Uuid = uuid::Uuid;
9
10mod uuid_scalar {
11 use super::*;
12
13 pub(super) fn to_output<S: ScalarValue>(v: &Uuid) -> Value<S> {
14 Value::scalar(v.to_string())
15 }
16
17 pub(super) fn from_input<S: ScalarValue>(v: &InputValue<S>) -> Result<Uuid, String> {
18 v.as_string_value()
19 .ok_or_else(|| format!("Expected `String`, found: {v}"))
20 .and_then(|s| Uuid::parse_str(s).map_err(|e| format!("Failed to parse `Uuid`: {e}")))
21 }
22}
23
24#[cfg(test)]
25mod test {
26 use uuid::Uuid;
27
28 use crate::{graphql_input_value, FromInputValue, InputValue};
29
30 #[test]
31 fn uuid_from_input() {
32 let raw = "123e4567-e89b-12d3-a456-426655440000";
33 let input: InputValue = graphql_input_value!((raw));
34
35 let parsed: Uuid = FromInputValue::from_input_value(&input).unwrap();
36 let id = Uuid::parse_str(raw).unwrap();
37
38 assert_eq!(parsed, id);
39 }
40}