[−][src]Attribute Macro async_graphql::Object
#[Object]
Define a GraphQL object with methods
All methods are converted to camelCase.
Macro parameters
Attribute | description | Type | Optional |
---|---|---|---|
name | Object name | string | Y |
rename_fields | Rename all the fields according to the given case convention. The possible values are "lowercase", "UPPERCASE", "PascalCase", "camelCase", "snake_case", "SCREAMING_SNAKE_CASE". | string | Y |
rename_args | Rename all the arguments according to the given case convention. The possible values are "lowercase", "UPPERCASE", "PascalCase", "camelCase", "snake_case", "SCREAMING_SNAKE_CASE". | string | Y |
cache_control | Object cache control | CacheControl | Y |
extends | Add fields to an entity that's defined in another service | bool | Y |
use_type_description | Specifies that the description of the type is on the type declaration. Description (derive.Description.html) | bool | Y |
visible | If false , it will not be displayed in introspection. See also the Book. | bool | Y |
visible | Call the specified function. If the return value is false , it will not be displayed in introspection. | string | Y |
Field parameters
Attribute | description | Type | Optional |
---|---|---|---|
skip | Skip this field | bool | Y |
name | Field name | string | Y |
desc | Field description | string | Y |
deprecation | Field deprecation reason | string | Y |
cache_control | Field cache control | CacheControl | Y |
external | Mark a field as owned by another service. This allows service A to use fields from service B while also knowing at runtime the types of that field. | bool | Y |
provides | Annotate the expected returned fieldset from a field on a base type that is guaranteed to be selectable by the gateway. | string | Y |
requires | Annotate the required input fieldset from a base type for a resolver. It is used to develop a query plan where the required fields may not be needed by the client, but the service may need additional information from other services. | string | Y |
guard | Field of guard | Guard | Y |
visible | If false , it will not be displayed in introspection. See also the Book. | bool | Y |
visible | Call the specified function. If the return value is false , it will not be displayed in introspection. | string | Y |
Field argument parameters
Attribute | description | Type | Optional |
---|---|---|---|
name | Argument name | string | Y |
desc | Argument description | string | Y |
default | Use Default::default for default value | none | Y |
default | Argument default value | literal | Y |
default_with | Expression to generate default value | code string | Y |
validator | Input value validator | InputValueValidator | Y |
complexity | Custom field complexity. See also the Book. | bool | Y |
complexity | Custom field complexity. | string | Y |
visible | If false , it will not be displayed in introspection. See also the Book. | bool | Y |
visible | Call the specified function. If the return value is false , it will not be displayed in introspection. | string | Y |
key | Is entity key(for Federation) | bool | Y |
Valid field return types
- Scalar values, such as
i32
andbool
.usize
,isize
,u128
andi128
are not supported Vec<T>
, such asVec<i32>
- Slices, such as
&[i32]
Option<T>
, such asOption<i32>
BTree<T>
,HashMap<T>
,HashSet<T>
,BTreeSet<T>
,LinkedList<T>
,VecDeque<T>
- GraphQL objects.
- GraphQL enums.
- References to any of the above types, such as
&i32
or&Option<String>
. Result<T, E>
, such asResult<i32, E>
Context
You can define a context as an argument to a method, and the context should be the first argument to the method.
ⓘThis example is not tested
#[Object] impl QueryRoot { async fn value(&self, ctx: &Context<'_>) -> { ... } }
Examples
use async_graphql::*; struct QueryRoot { value: i32, } #[Object] impl QueryRoot { /// value async fn value(&self) -> i32 { self.value } /// reference value async fn value_ref(&self) -> &i32 { &self.value } /// value with error async fn value_with_error(&self) -> Result<i32> { Ok(self.value) } async fn value_with_arg(&self, #[graphql(default = 1)] a: i32) -> i32 { a } } async_std::task::block_on(async move { let schema = Schema::new(QueryRoot { value: 10 }, EmptyMutation, EmptySubscription); let res = schema.execute(r#"{ value valueRef valueWithError valueWithArg1: valueWithArg valueWithArg2: valueWithArg(a: 99) }"#).await.into_result().unwrap().data; assert_eq!(res, value!({ "value": 10, "valueRef": 10, "valueWithError": 10, "valueWithArg1": 1, "valueWithArg2": 99 })); });