Merge pull request #917 from bvanneerven/master
This commit is contained in:
commit
b2cb673b9c
|
@ -13,6 +13,7 @@
|
|||
- [Interface](define_interface.md)
|
||||
- [Union](define_union.md)
|
||||
- [InputObject](define_input_object.md)
|
||||
- [OneofObject](define_one_of_object.md)
|
||||
- [Default value](default_value.md)
|
||||
- [Schema](define_schema.md)
|
||||
- [Query and Mutation](query_and_mutation.md)
|
||||
|
|
36
docs/en/src/define_one_of_object.md
Normal file
36
docs/en/src/define_one_of_object.md
Normal file
|
@ -0,0 +1,36 @@
|
|||
# OneofObject
|
||||
|
||||
A `OneofObject` is a special type of `InputObject`, in which only one of its fields must be set and is not-null.
|
||||
It is especially useful when you want a user to be able to choose between several potential input types.
|
||||
|
||||
This feature is still an [RFC](https://github.com/graphql/graphql-spec/pull/825) and therefore not yet officially part of the GraphQL spec, but `Async-graphql` already supports it!
|
||||
|
||||
```rust
|
||||
use async_graphql::*;
|
||||
|
||||
#[derive(OneofObject)]
|
||||
enum UserBy {
|
||||
Email(String),
|
||||
RegistrationNumber(i64),
|
||||
Address(Address)
|
||||
}
|
||||
|
||||
#[derive(InputObject)]
|
||||
struct Address {
|
||||
street: String,
|
||||
house_number: String,
|
||||
city: String,
|
||||
zip: String,
|
||||
}
|
||||
|
||||
struct Query {}
|
||||
|
||||
#[Object]
|
||||
impl Query {
|
||||
async fn search_users(&self, by: Vec<UserBy>) -> Vec<User> {
|
||||
// ... Searches and returns a list of users ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
As you can see, a `OneofObject` is represented by an `enum` in which each variant contains another `InputType`. This means that you can use [`InputObject`](define_input_object.md) as variant too.
|
Loading…
Reference in New Issue
Block a user