async-graphql/docs/en/src/define_one_of_object.md

41 lines
1.1 KiB
Markdown
Raw Normal View History

2022-05-07 11:37:11 +00:00
# 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
# extern crate async_graphql;
# #[derive(SimpleObject)]
# struct User { a: i32 }
2022-05-07 11:37:11 +00:00
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 ...
# todo!()
2022-05-07 11:37:11 +00:00
}
}
```
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.