Add flatten union documentation
This commit is contained in:
parent
97dae8cf82
commit
0a5a8f243d
|
@ -44,3 +44,54 @@ enum Shape {
|
||||||
Square(Square),
|
Square(Square),
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Flattening nested unions
|
||||||
|
|
||||||
|
A restriction in GraphQL is the inability to create a union type out of
|
||||||
|
other union types. All members must be concrete types. To support nested
|
||||||
|
unions, we can "flatten" members that are unions, bringing their members up
|
||||||
|
into the parent union. This is done by applying `#[item(flatten)]` on each
|
||||||
|
member we want to flatten.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
#[derive(async_graphql::Union)]
|
||||||
|
pub enum TopLevelUnion {
|
||||||
|
A(A),
|
||||||
|
|
||||||
|
// Will fail to compile unless we flatten the union member
|
||||||
|
#[item(flatten)]
|
||||||
|
B(B),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(async_graphql::SimpleObject)]
|
||||||
|
pub struct A {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(async_graphql::Union)]
|
||||||
|
pub enum B {
|
||||||
|
C(C),
|
||||||
|
D(D),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(async_graphql::SimpleObject)]
|
||||||
|
pub struct C {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(async_graphql::SimpleObject)]
|
||||||
|
pub struct D {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The above example transforms the top-level union into this equivalent:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
#[derive(async_graphql::Union)]
|
||||||
|
pub enum TopLevelUnion {
|
||||||
|
A(A),
|
||||||
|
C(C),
|
||||||
|
D(D),
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
Loading…
Reference in New Issue
Block a user