From d8b07e8c6890530b292619a163890c83074f2412 Mon Sep 17 00:00:00 2001 From: Magnus Hallin Date: Sat, 4 Feb 2017 10:45:25 +0100 Subject: [PATCH] Implement __typename for GraphQL objects Fixes #22. --- src/macros/object.rs | 4 ++++ src/tests/query_tests.rs | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/macros/object.rs b/src/macros/object.rs index f62c3d3c..4fcfd1f3 100644 --- a/src/macros/object.rs +++ b/src/macros/object.rs @@ -378,6 +378,10 @@ macro_rules! graphql_object { mt.into_meta() } + fn concrete_type_name(&self, _: &Self::Context) -> String { + $outname.to_owned() + } + #[allow(unused_variables)] #[allow(unused_mut)] fn resolve_field( diff --git a/src/tests/query_tests.rs b/src/tests/query_tests.rs index 2837c7b0..6278df43 100644 --- a/src/tests/query_tests.rs +++ b/src/tests/query_tests.rs @@ -362,3 +362,24 @@ fn test_query_inline_fragments_human() { ].into_iter().collect()), vec![]))); } + +#[test] +fn test_object_typename() { + let doc = r#" + { + human(id: "1000") { + __typename + } + }"#; + let database = Database::new(); + let schema = RootNode::new(&database, EmptyMutation::::new()); + + assert_eq!( + ::execute(doc, None, &schema, &Variables::new(), &database), + Ok((Value::object(vec![ + ("human", Value::object(vec![ + ("__typename", Value::string("Human")), + ].into_iter().collect())), + ].into_iter().collect()), + vec![]))); +}