Rust - в чем ошибка в match для клиента Postgresql?
Подскажите в чем ошибка или в каком направлении искать поиск причины? Почему получаются разные типы в данном случае?
let client = Client::connect("postgresql://user:pass@localhost:5432/base", NoTls).unwrap();
match client {
Ok(mut client) => {
let stmt = client.prepare("INSERT INTO status (status) VALUES ($1)").unwrap();
client
.execute(&stmt, &[&json_data])
.expect("Failed to execute statement");
println!("JSON data inserted successfully");
}
Err(err) => println!("Error: {}", err),
}
Выдает сообщение:
error[E0308]: mismatched types
--> src/main.rs:252:9
|
251 | match client {
| ------ this expression has type `postgres::Client`
252 | Ok(mut client) => {
| ^^^^^^^^^^^^^^ expected `Client`, found `Result<_, _>`
|
= note: expected struct `postgres::Client`
found enum `Result<_, _>`
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
let client = Client::connect(...).unwrap();
^^^^^^^^^
match client {
Ok(mut client)
unwrap()
вытаскивает объект из Result
, то есть postgres::Client
, и его вы уже не можете проверить на OK
и Err
, как Result
.
Если вы хотите проверять Result
на OK
или Err
, то уберите .unwrap()
и тогда спокойно проверяйте (заодно client
сам оттуда достанется при проверке).
let result = Client::connect(...);
match result {
Ok(client)
Автор решения: Alex
→ Ссылка
выражение Client::connect возвращает Result<postgres::Client, postgres::Error>, то есть это результат, а не сам объект Client. В то время как, судя по коду, вы пытаетесь использовать его напрямую как Client в блоке match