Update book.

This commit is contained in:
Sunli 2021-01-16 08:08:36 +08:00
parent a124f04754
commit 457fb4223a
2 changed files with 89 additions and 1 deletions

View File

@ -22,4 +22,48 @@ impl Mutation {
// ...
}
}
```
```
## 泛型
如果你希望其它类型能够重用`InputObject`,则可以定义泛型的`InputObject`,并指定具体的类型。
在下面的示例中,创建了两种`InputObject`类型:
```rust
#[derive(InputObject)]
#[graphql(concrete(name = "SomeName", params(SomeType)))]
#[graphql(concrete(name = "SomeOtherName", params(SomeOtherType)))]
pub struct SomeGenericInput<T: InputType> {
field1: Option<T>,
field2: String
}
```
注意:每个泛型参数必须实现`InputType`,如上所示。
生成的SDL如下:
```gql
input SomeName {
field1: SomeType
field2: String!
}
input SomeOtherName {
field1: SomeOtherType
field2: String!
}
```
在其它`InputObject`中使用具体的泛型类型:
```rust
#[derive(InputObject)]
pub struct YetAnotherInput {
a: SomeGenericInput<SomeType>,
b: SomeGenericInput<SomeOtherType>,
}
```
你可以将多个通用类型传递给`params`,并用逗号分隔。

View File

@ -19,3 +19,47 @@ struct MyObject {
c: i32,
}
```
## 泛型
如果你希望其它类型能够重用`SimpleObject`,则可以定义泛型的`SimpleObject`,并指定具体的类型。
在下面的示例中,创建了两种`SimpleObject`类型:
```rust
#[derive(SimpleObject)]
#[graphql(concrete(name = "SomeName", params(SomeType)))]
#[graphql(concrete(name = "SomeOtherName", params(SomeOtherType)))]
pub struct SomeGenericObject<T: OutputType> {
field1: Option<T>,
field2: String
}
```
注意:每个泛型参数必须实现`OutputType`,如上所示。
生成的SDL如下:
```gql
type SomeName {
field1: SomeType
field2: String!
}
type SomeOtherName {
field1: SomeOtherType
field2: String!
}
```
在其它`Object`中使用具体的泛型类型:
```rust
#[derive(SimpleObject)]
pub struct YetAnotherObject {
a: SomeGenericObject<SomeType>,
b: SomeGenericObject<SomeOtherType>,
}
```
你可以将多个通用类型传递给`params`,并用逗号分隔。