0

Rust/Tonic grpc サービスの rpc を作成して、sqlx クレートを介して postgresdb からユーザーを削除しています。として保存しているユーザーIDでユーザーを削除しようとしています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