0

我正在为 Rust/Tonic grpc 服务编写 rpc,以通过 sqlx crate 从 postgresdb 中删除用户。我正在尝试通过存储为UUID. 我对 Uuid 的原型定义是:

message Uuid {
  fixed64 lsb = 1;
  fixed64 msb = 2;
}

我的UserRequest定义是:


message UserRequest {
  Uuid user_id = 1;
}

我删除用户的 rpc 是:

async fn delete_user(
        &self,
        request: Request<UserRequest>,
    ) ->  Result<Response<EmptyResp>, Status> {

        let UserRequest {
            user_id
        } = request.into_inner();

        let row = sqlx::query!(
            r"
                DELETE FROM users WHERE user_id = $1
            ",
            sqlx::types::Uuid(user_id).as_u128(), // how do I convert this to SQLX?
        ).execute(&self.pool)
            .await
            .map_err(CustomError::from)?;


        if row.rows_affected() == 0 {
            return Err(Status::internal(
                "Unable to delete user",
            ));
        }
        Ok(Response::new(EmptyResp {}))
    }

这会导致以下错误:

error[E0308]: mismatched types
   --> src/lib.rs:139:13
    |
139 |             user_id,
    |             ^^^^^^^ expected struct `sqlx::types::Uuid`, found struct `lib::Uuid`
    |
    = note: expected enum `Option<sqlx::types::Uuid>`
               found enum `Option<lib::Uuid>`
note: return type inferred to be `Option<sqlx::types::Uuid>` here
   --> org-management/src/organization_manager.rs:128:47
    |
128 |       ) ->  Result<Response<EmptyResp>, Status> {
    |  _______________________________________________^
129 | |
130 | |         let UserRequest {
131 | |             user_id
...   |
153 | |
154 | |     }
    | |_____^

我正在尝试使用此行将 UUID 类型转换为 sqlx 类型: sqlx::types::Uuid(user_id).as_u128()并且很好奇是否有人可以告诉我我做错了什么?谢谢!

4

0 回答 0