我正在为 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()
并且很好奇是否有人可以告诉我我做错了什么?谢谢!