2个版本
0.0.3 | 2022年7月24日 |
---|---|
0.0.2 | 2022年7月23日 |
0.0.1 |
|
#15 在 #juniper
9KB
51 行
juniper-compose
将多个Juniper对象定义合并为单个对象类型。
动机
你正在使用Juniper构建GraphQL服务器。在某个时候,你意识到你的查询和突变类型变得非常大
#[derive(Default)]
struct Query;
#[juniper::graphql_object]
impl Query {
async fn user(ctx: &Context, id: Uuid) -> User {
// ...
}
async fn users(ctx: &Context) -> Vec<User> {
// ...
}
async fn task(ctx: &Context, id: Uuid) -> Task {
// ...
}
async fn tasks(ctx: &Context) -> Vec<Task> {
// ...
}
// ...many more
}
你希望将其拆分为多个特定领域的文件,例如,所有用户查询在一个文件中,所有任务查询在另一个文件中。使用当前的Juniper API,这非常困难,但这个crate可以帮助你。
用法
#[derive(Default)]
struct UserQueries;
#[composable_object]
#[juniper::graphql_object]
impl UserQueries {
async fn user(ctx: &Context, id: Uuid) -> User {
// ...
}
async fn users(ctx: &Context) -> Vec<User> {
// ...
}
}
#[derive(Default)]
struct TaskQueries;
#[composable_object]
#[juniper::graphql_object]
impl TaskQueries {
async fn task(ctx: &Context, id: Uuid) -> Task {
// ...
}
async fn tasks(ctx: &Context) -> Vec<Task> {
// ...
}
}
composite_object!(Query(UserQueries, TaskQueries));
支持自定义上下文
composite_object!(Query<Context = MyCustomContext>(UserQueries, TaskQueries));
支持生成类型的可见性指定符
composite_object!(pub(crate) Query<Context = MyCustomContext>(UserQueries, TaskQueries));
目前不支持自定义标量,但如果有需求,将会添加。
依赖关系
~9.5MB
~220K SLoC