Struct async_graphql::dynamic::InterfaceField
source · pub struct InterfaceField { /* private fields */ }
Available on crate feature
dynamic-schema
only.Expand description
A GraphQL interface field type
Examples
use async_graphql::{dynamic::*, value, Value};
let obj_a = Object::new("MyObjA")
.implement("MyInterface")
.field(Field::new("a", TypeRef::INT, |_| {
FieldFuture::new(async { Ok(Some(Value::from(100))) })
}))
.field(Field::new("b", TypeRef::INT, |_| {
FieldFuture::new(async { Ok(Some(Value::from(200))) })
}));
let obj_b = Object::new("MyObjB")
.implement("MyInterface")
.field(Field::new("a", TypeRef::INT, |_| {
FieldFuture::new(async { Ok(Some(Value::from(300))) })
}))
.field(Field::new("c", TypeRef::INT, |_| {
FieldFuture::new(async { Ok(Some(Value::from(400))) })
}));
let interface = Interface::new("MyInterface").field(InterfaceField::new("a", TypeRef::INT));
let query = Object::new("Query")
.field(Field::new("valueA", interface.type_ref(), |_| {
FieldFuture::new(async {
Ok(Some(FieldValue::with_type(FieldValue::NULL, "MyObjA")))
})
}))
.field(Field::new("valueB", interface.type_ref(), |_| {
FieldFuture::new(async {
Ok(Some(FieldValue::with_type(FieldValue::NULL, "MyObjB")))
})
}));
let schema = Schema::build(query.type_name(), None, None)
.register(obj_a)
.register(obj_b)
.register(interface)
.register(query)
.finish()?;
let query = r#"
fragment A on MyObjA { b }
fragment B on MyObjB { c }
{
valueA { a ...A ...B }
valueB { a ...A ...B }
}
"#;
assert_eq!(
schema.execute(query).await.into_result().unwrap().data,
value!({
"valueA": {
"a": 100,
"b": 200,
},
"valueB": {
"a": 300,
"c": 400,
}
})
);
Implementations
sourceimpl InterfaceField
impl InterfaceField
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for InterfaceField
impl Send for InterfaceField
impl Sync for InterfaceField
impl Unpin for InterfaceField
impl UnwindSafe for InterfaceField
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more