2个版本
0.0.3 | 2022年7月24日 |
---|---|
0.0.2 | 2022年7月23日 |
0.0.1 |
|
#26 in #juniper
在juniper-compose中使用
13KB
282 代码行
juniper-compose
将多个Juniper对象定义合并为单个对象类型。
动机
你正在使用Juniper构建GraphQL服务器。在某个时刻,你意识到你的Query和Mutation类型非常大
#[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));
目前不支持自定义标量,但如果有需求,将会添加。
依赖
~1.5MB
~35K SLoC