16个版本 (7个重大变更)
0.8.0 | 2023年10月19日 |
---|---|
0.6.0 | 2023年6月20日 |
0.5.0 | 2023年2月17日 |
0.4.0 | 2022年11月29日 |
0.1.0 | 2021年11月24日 |
#219 in 编码
2,320 每月下载量
在 2 个crate中使用 (通过 introspector-gadget)
530KB
13K SLoC
入门指南
添加依赖项以开始使用 apollo-encoder
cargo add apollo-encoder
或者将此添加到您的 Cargo.toml
以进行手动安装
# Just an example, change to the necessary package version.
[dependencies]
apollo-encoder = "0.8.0"
Rust版本
apollo-encoder
在Rust的最新稳定版本上进行了测试。旧版本可能不兼容。
示例
创建可执行定义
use apollo_encoder::{
Document, Field, FragmentSpread, InlineFragment, OperationDefinition, OperationType,
Selection, SelectionSet, TypeCondition,
};
use indoc::indoc;
let mut document = Document::new();
let mut droid_selection_set = SelectionSet::new();
let primary_function_field = Selection::Field(Field::new(String::from("primaryFunction")));
droid_selection_set.selection(primary_function_field);
let mut droid_inline_fragment = InlineFragment::new(droid_selection_set);
droid_inline_fragment.type_condition(Some(TypeCondition::new(String::from("Droid"))));
let comparison_fields_fragment_spread =
FragmentSpread::new(String::from("comparisonFields"));
let name_field = Field::new(String::from("name"));
let hero_selection_set = vec![
Selection::Field(name_field),
Selection::FragmentSpread(comparison_fields_fragment_spread),
Selection::InlineFragment(droid_inline_fragment),
];
let mut hero_field = Field::new(String::from("hero"));
hero_field.selection_set(Some(SelectionSet::with_selections(hero_selection_set)));
let hero_for_episode_selection_set = vec![Selection::Field(hero_field)];
let mut hero_for_episode_operation = OperationDefinition::new(
OperationType::Query,
SelectionSet::with_selections(hero_for_episode_selection_set),
);
hero_for_episode_operation.name(Some(String::from("HeroForEpisode")));
document.operation(hero_for_episode_operation);
assert_eq!(
document.to_string(),
indoc! {r#"
query HeroForEpisode {
hero {
name
...comparisonFields
... on Droid {
primaryFunction
}
}
}
"#}
);
创建类型系统定义
use apollo_encoder::{
Argument, Directive, Document, DirectiveDefinition, EnumValue,
EnumDefinition, UnionDefinition, Value
};
use indoc::indoc;
let mut document = Document::new();
// Create a Directive Definition.
let mut directive_def = DirectiveDefinition::new("provideTreat".to_string());
directive_def.description("Ensures cats get treats.".to_string());
directive_def.location("OBJECT".to_string());
directive_def.location("FIELD_DEFINITION".to_string());
directive_def.location("INPUT_FIELD_DEFINITION".to_string());
document.directive(directive_def);
// Create an Enum Definition
let mut enum_ty_1 = EnumValue::new("CatTree".to_string());
enum_ty_1.description("Top bunk of a cat tree.".to_string());
let enum_ty_2 = EnumValue::new("Bed".to_string());
let mut enum_ty_3 = EnumValue::new("CardboardBox".to_string());
let mut directive = Directive::new(String::from("deprecated"));
directive.arg(Argument::new(
String::from("reason"),
Value::String("Box was recycled.".to_string()),
));
enum_ty_3.directive(directive);
let mut enum_def = EnumDefinition::new("NapSpots".to_string());
enum_def.description("Favourite cat\nnap spots.".to_string());
enum_def.value(enum_ty_1);
enum_def.value(enum_ty_2);
enum_def.value(enum_ty_3);
document.enum_(enum_def);
// Union Definition
let mut union_def = UnionDefinition::new("Pet".to_string());
union_def.description(
"A union of all pets represented within a household.".to_string(),
);
union_def.member("Cat".to_string());
union_def.member("Dog".to_string());
document.union(union_def);
assert_eq!(
document.to_string(),
indoc! {r#"
"A union of all pets represented within a household."
union Pet = Cat | Dog
"""
Favourite cat
nap spots.
"""
enum NapSpots {
"Top bunk of a cat tree."
CatTree
Bed
CardboardBox @deprecated(reason: "Box was recycled.")
}
"Ensures cats get treats."
directive @provideTreat on OBJECT | FIELD_DEFINITION | INPUT_FIELD_DEFINITION
"#},
);
许可证
许可协议为以下之一
- Apache许可证2.0版本 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
由您选择。
依赖项
~1.1–1.9MB
~35K SLoC