json - 紫回调不同的Json结构

标签 json rust json-rpc serde yew

我在WebsocketService中使用yew并将jsonrpcs发送到后端并接收相应的答案。我有一个问题来区分有效和错误的jsonrpc答案。
在模型实现中,我通过以下方式创建回调:

let callback = self.link.callback(|Json(data)| {
    Msg::WsCallback(data)
});

WsCallback是一 strip 有实际响应的消息:
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结构进行某种匹配吗?作为额外的问题:是否有可能解析结果类型不同于String的有效响应?

最佳答案

您应该同时使用两种类型的包装器,并为untagged添加serde属性:

#[derive(Deserialize)]
#[serde(untagged)]
pub enum JsonRpcResult {
    Ok(WsResponse),
    Err(WsResponseErr),
}

Is there a possibility to parse valid response with a result type different than String?


是的,我强烈建议您在此处使用自定义类型。您可以使用实现Deserialize特质的任何类型,而不是String。您可以阅读here如何实现Deserialize或仅将derive用于您的结构,如上所述。

关于json - 紫回调不同的Json结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61836751/

相关文章:

ios - 如何使用 Sync 将 JSON 解析为与其自身有关系的实体?

java - 如何检查 GSON 元素的空值?

python - 如何使用python向JSON-RPC请求数据

rust - 摆脱生命周期的限制?

rust - 正在释放的Rust指针未分配错误

linux - 在 Linux 上安装 libjson-rpc-perl

json - JSON RPC 与 HTTP2 与 grpc 有什么区别?

javascript - '解析 JSON 时出现 SyntaxError : Unexpected end of input'. 错误?

jquery - 如何使用 jQuery/JavaScript 解析 JSON 数据?

math - 标准库中是否有返回两个数字中较大或较小的函数?