From 3a0ccd43a03a398e2cbfccbcdfb4acb41b5ff339 Mon Sep 17 00:00:00 2001 From: Sunli Date: Fri, 28 Aug 2020 14:04:59 +0800 Subject: [PATCH] Update docs --- docs/en/src/SUMMARY.md | 1 + docs/en/src/procedural_macros.md | 49 +++++++++++++++++++++++++++++ docs/zh-CN/src/SUMMARY.md | 1 + docs/zh-CN/src/merging_objects.md | 37 ++++++++++++++++++++++ docs/zh-CN/src/procedural_macros.md | 49 +++++++++++++++++++++++++++++ 5 files changed, 137 insertions(+) create mode 100644 docs/en/src/procedural_macros.md create mode 100644 docs/zh-CN/src/procedural_macros.md diff --git a/docs/en/src/SUMMARY.md b/docs/en/src/SUMMARY.md index 1dad68f6..e75adb9e 100644 --- a/docs/en/src/SUMMARY.md +++ b/docs/en/src/SUMMARY.md @@ -13,6 +13,7 @@ - [Union](define_union.md) - [InputObject](define_input_object.md) - [Default value](default_value.md) + - [Two ways to define types](procedural_macros.md) - [Schema](define_schema.md) - [Query and Mutation](query_and_mutation.md) - [Subscription](subscription.md) diff --git a/docs/en/src/procedural_macros.md b/docs/en/src/procedural_macros.md new file mode 100644 index 00000000..33e415d5 --- /dev/null +++ b/docs/en/src/procedural_macros.md @@ -0,0 +1,49 @@ +# Two ways to define types + +I think you have discovered that defining a GraphqlQL type can be use attribute macro or derive. + +The following is the corresponding table: + +|Type|Attribute macro|Derive| +|---|-----|----| +|Enum|Enum|GQLEnum| +|Simple Object|SimpleObject|GQLSimpleObject| +|Input Object|InputObject|GQLInputObject| +|Interface|Interface|GQLInterface| +|Union|Union|GQLUnion| +|Merged Object|MergedObject|GQLMergedObject| +|Merged Subscription|MergedSubscription|GQLMergedSubscription| + +The advantage of attribute macro is that you can provide some parameters at the same time, for example: + +```rust +#[SimpleObject(name = "ABC")] +struct MyObject { + value: i32, +} +``` + +**But it does not support conditional compilation**, for example: + +```rust +#[SimpleObject] +struct MyObject { + #[cfg(windows)] + value: i32, + + #[cfg(not(windows))] + value: i32, +} +``` + +**Derive can support conditional compilation**, but it needs to provide parameters separately, for example: + +```rust +#[derive(SimpleObject)] +#[graphql(name = "ABC")] +struct MyObject { + value: i32, +} +``` + +_Which way to define the type is up to you, I prefer to use derive._ \ No newline at end of file diff --git a/docs/zh-CN/src/SUMMARY.md b/docs/zh-CN/src/SUMMARY.md index f878dcf3..1f609dff 100644 --- a/docs/zh-CN/src/SUMMARY.md +++ b/docs/zh-CN/src/SUMMARY.md @@ -13,6 +13,7 @@ - [联合(Union)](define_union.md) - [输入对象(InputObject)](define_input_object.md) - [默认值](default_value.md) + - [定义类型的两种方式](procedural_macros.md) - [定义模式(Schema)](define_schema.md) - [查询和变更](query_and_mutation.md) - [订阅](subscription.md) diff --git a/docs/zh-CN/src/merging_objects.md b/docs/zh-CN/src/merging_objects.md index cae01b0d..055a9209 100644 --- a/docs/zh-CN/src/merging_objects.md +++ b/docs/zh-CN/src/merging_objects.md @@ -48,3 +48,40 @@ let schema = Schema::new( EmptySubscription ); ``` + +# 合并订阅 + +和`GQLMergedObject`一样,你可以派生`GQLMergedSubscription`来合并单独的`#[Subscription]`块。 + +像合并对象一样,每个订阅块都需要一个唯一的名称。 + +```rust +#[derive(Default)] +struct Subscription1; + +#[Subscription] +impl Subscription1 { + async fn events1(&self) -> impl Stream { + futures::stream::iter(0..10) + } +} + +#[derive(Default)] +struct Subscription2; + +#[Subscription] +impl Subscription2 { + async fn events2(&self) -> impl Stream { + futures::stream::iter(10..20) + } +} + +#[derive(GQLMergedSubscription, Default)] +struct Subscription(Subscription1, Subscription2); + +let schema = Schema::new( + Query::default(), + EmptyMutation, + Subscription::default() +); +``` diff --git a/docs/zh-CN/src/procedural_macros.md b/docs/zh-CN/src/procedural_macros.md new file mode 100644 index 00000000..0b0a02eb --- /dev/null +++ b/docs/zh-CN/src/procedural_macros.md @@ -0,0 +1,49 @@ +# 定义类型的两种方式 + +我想你已经发现,定义一个GraphqlQL类型可以通过属性宏或者派生。 + +下面是一个对应表: + +|类型|属性宏|派生| +|---|-----|----| +|枚举(Enum)|Enum|GQLEnum| +|简单对象(Simple Object)|SimpleObject|GQLSimpleObject| +|输入对象(Input Object)|InputObject|GQLInputObject| +|接口(Interface)|Interface|GQLInterface| +|联合(Union)|Union|GQLUnion| +|合并对象(Merged Object)|MergedObject|GQLMergedObject| +|合并订阅(Merged Subscription)|MergedSubscription|GQLMergedSubscription| + +属性宏的好处在于你可以同时提供一些参数,例如: + +```rust +#[SimpleObject(name = "ABC")] +struct MyObject { + value: i32, +} +``` + +但是它不支持条件编译,例如: + +```rust +#[SimpleObject] +struct MyObject { + #[cfg(windows)] + value: i32, + + #[cfg(not(windows))] + value: i32, +} +``` + +派生可以支持条件编译,但它需要单独提供参数,例如: + +```rust +#[derive(SimpleObject)] +#[graphql(name = "ABC")] +struct MyObject { + value: i32, +} +``` + +用哪种方式来定义类型取决于你,我更加推荐使用派生。 \ No newline at end of file