我与WebsocketService一起使用红豆杉,并将jsonrpcs发送到后端并接收相应的答案。我有一个问题要区分有效和错误jsonrpc答案。在模型实现中,我通过以下方法创建回调:
let callback = self.link.callback(|Json(data)| {
Msg::WsCallback(data)
});WsCallback是一条具有实际响应的消息:
pub enum Msg {
// ...
WsCallback(Result<WsResponse, Error>),
}响应是实际的JsonRpc格式:
#[derive(Deserialize)]
pub struct WsResponse {
jsonrpc: String,
result: String,
id: i32,
}对于有效的答案,工作正常,但是如何处理JsonRpc响应的错误大小写,如下所示:
#[derive(Deserialize)]
pub struct JsonRpcError{
code: i32,
message: String,
}
#[derive(Deserialize)]
pub struct WsResponseErr {
jsonrpc: String,
error: JsonRpcError,
id: i32,
}我能在Json结构上做些什么匹配吗?作为附加问题:是否有可能用与字符串不同的结果类型解析有效的响应?
发布于 2020-08-30 10:35:14
应该对这两种类型使用包装器,并为untagged添加serde属性。
#[derive(Deserialize)]
#[serde(untagged)]
pub enum JsonRpcResult {
Ok(WsResponse),
Err(WsResponseErr),
}是否有可能用与字符串不同的结果类型解析有效的响应?
是的,我强烈建议您在那里使用自定义类型。您可以使用实现Deserialize特性的任何类型而不是String。您可以阅读这里如何实现Deserialize,或者只对您的结构使用derive --您已经这样做了。
https://stackoverflow.com/questions/61836751
复制相似问题