Skip to main content

Module resolver

Module resolver 

Source
Expand description

DB Resolver trait — P2-1 修复 C-3:真实 DB resolver 集成

定义 GraphQL root field 与真实数据源(数据库/ORM)之间的桥接接口。

§设计

  • 使用 boxed future 手动实现 async trait,避免引入 async-trait 依赖
  • 调用方实现此 trait 后,通过 GraphQLServer::with_db_resolver 注入
  • 未注入 resolver 时,schema 回退到 mock 数据(向后兼容)

§使用示例

use sz_orm_graphql::resolver::{DbResolver, ResolverContext};
use std::sync::Arc;

struct MyDbResolver;

impl DbResolver for MyDbResolver {
    fn resolve_query(
        &self,
        ctx: &ResolverContext,
    ) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<serde_json::Value, String>> + Send>> {
        let field_name = ctx.field_name.clone();
        let args = ctx.args.clone();
        Box::pin(async move {
            // 在此处执行真实数据库查询
            Ok(serde_json::json!({"id": "1", "name": format!("{}_real", field_name)}))
        })
    }
}

let resolver = Arc::new(MyDbResolver);
let server = sz_orm_graphql::GraphQLServer::new(4000)
    .with_schema(schema)
    .with_db_resolver(resolver);

Structs§

ResolverContext
Resolver 调用上下文 — 传递字段名、参数等信息给 resolver

Traits§

DbResolver
DB Resolver trait — P2-1 修复 C-3

Type Aliases§

SharedDbResolver
类型别名:Arc 包装的 DbResolver