小编ehe*_*nes的帖子

如何在 Rust 中使用带有“juniper”订阅的“sqlx”?

背景:

sqlx我在与订阅集成时遇到问题juniper

我收到了Pin<Box<dyn Stream<Item = Result<User, sqlx::Error>> + 'e + Send>>来自sqlx::query::QueryAs::fetch().

juniper需要将订阅返回为Pin<Box<dyn Stream<Item = Result<User, juniper::FieldError>> + Send>>.

Result<User, sqlx::Error>请注意从到 的更改Result<User, juniper::FieldError>。使用map_err()fromfutures::TryStreamExt,我创建了以下代码来执行查询并转换错误类型。

type UsersStream =
    Pin<Box<dyn Stream<Item = Result<User, FieldError>> + Send>>;

#[juniper::graphql_subscription(Context = Context)]
impl SubscriptionRoot {
    async fn users(context: &Context) -> UsersStream {
        let sqlx::query_as!(User, "SELECT * FROM users")
            .fetch(&context.pool)
            .map_err(|e| {
                FieldError::new(
                    "Database error",
                    graphql_value!(format!("{}", e)))
            })
            .boxed() …
Run Code Online (Sandbox Code Playgroud)

rust graphql juniper rust-sqlx

8
推荐指数
1
解决办法
483
查看次数

标签 统计

graphql ×1

juniper ×1

rust ×1

rust-sqlx ×1