56 lines
3.6 KiB
Markdown
56 lines
3.6 KiB
Markdown
|
Define a GraphQL oneof input object
|
||
|
|
||
|
# Macro attributes
|
||
|
|
||
|
| 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 |
|
||
|
| visible | If `false`, it will not be displayed in introspection. *[See also the Book](https://async-graphql.github.io/async-graphql/en/visibility.html).* | bool | Y |
|
||
|
| visible | Call the specified function. If the return value is `false`, it will not be displayed in introspection. | string | Y |
|
||
|
| concretes | Specify how the concrete type of the generic SimpleObject should be implemented. | ConcreteType | Y |
|
||
|
|
||
|
# Field attributes
|
||
|
|
||
|
| Attribute | description | Type | Optional |
|
||
|
|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------|-------------|----------|
|
||
|
| name | Field name | string | Y |
|
||
|
| validator | Input value validator *[See also the Book](https://async-graphql.github.io/async-graphql/en/input_value_validators.html)* | object | Y |
|
||
|
| visible | If `false`, it will not be displayed in introspection. *[See also the Book](https://async-graphql.github.io/async-graphql/en/visibility.html).* | bool | Y |
|
||
|
| visible | Call the specified function. If the return value is `false`, it will not be displayed in introspection. | string | Y |
|
||
|
| secret | Mark this field as a secret, it will not output the actual value in the log. | bool | Y |
|
||
|
|
||
|
# Examples
|
||
|
|
||
|
```rust
|
||
|
use async_graphql::*;
|
||
|
|
||
|
#[derive(OneofObject)]
|
||
|
enum MyInputObject {
|
||
|
A(i32),
|
||
|
B(String),
|
||
|
}
|
||
|
|
||
|
struct Query;
|
||
|
|
||
|
#[Object]
|
||
|
impl Query {
|
||
|
async fn value(&self, input: MyInputObject) -> String {
|
||
|
match input {
|
||
|
MyInputObject::A(value) => format!("a:{}", value),
|
||
|
MyInputObject::B(value) => format!("b:{}", value),
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# tokio::runtime::Runtime::new().unwrap().block_on(async move {
|
||
|
let schema = Schema::new(Query, EmptyMutation, EmptySubscription);
|
||
|
let res = schema.execute(r#"
|
||
|
{
|
||
|
value1: value(input:{a:100})
|
||
|
value2: value(input:{b:"abc"})
|
||
|
}"#).await.into_result().unwrap().data;
|
||
|
assert_eq!(res, value!({ "value1": "a:100", "value2": "b:abc" }));
|
||
|
# });
|
||
|
```
|