【发布时间】:2023-01-12 03:32:33
【问题描述】:
我正在尝试以这种方式处理来自 websocket 连接的可能错误:
let connection: Result<Client<TlsStream<TcpStream>>,WebSocketError>
= client_builder.unwrap().connect_secure(Some(tls_connector.unwrap()));
if connection.is_err() {
println!("Error: {}", connection.unwrap_err());
}
我收到的错误如下:
error[E0277]: `websocket::sync::Client<native_tls::TlsStream<std::net::TcpStream>>` doesn't implement `Debug`
--> src/main.rs:29:25
|
29 | println!("Error: {}", connection.as_ref().unwrap_err());
| ^^^^^^^^^^^^^^^^^^^ ---------- required by a bound introduced by this call
| |
| `websocket::sync::Client<native_tls::TlsStream<std::net::TcpStream>>` cannot be formatted using `{:?}` because it doesn't implement `Debug`
|
= help: the trait `Debug` is not implemented for `websocket::sync::Client<native_tls::TlsStream<std::net::TcpStream>>`
= note: required for `&websocket::sync::Client<native_tls::TlsStream<std::net::TcpStream>>` to implement `Debug`
note: required by a bound in `Result::<T, E>::unwrap_err`
这对我来说很奇怪,因为 unwrap_err() 应该返回一个 WebSocketError 枚举而不是 websocket::sync::Client<native_tls::TlsStreamstd::net::TcpStream> 正确地没有调试实现
我尝试了不同的解包函数,但老实说,我需要 unwrap_err() 函数。
【问题讨论】:
-
如果不需要,请不要
unwrap。整个笨拙的.is_err()后跟.unwrap_err()组合可以用简单的if let代替。 -
有道理谢谢。