首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同Json结构的Yew回调

不同Json结构的Yew回调
EN

Stack Overflow用户
提问于 2020-05-16 12:30:20
回答 1查看 266关注 0票数 0

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

代码语言:javascript
复制
let callback = self.link.callback(|Json(data)| {
    Msg::WsCallback(data)
});

WsCallback是一条具有实际响应的消息:

代码语言:javascript
复制
pub enum Msg {
    // ...
    WsCallback(Result<WsResponse, Error>),
}

响应是实际的JsonRpc格式:

代码语言:javascript
复制
#[derive(Deserialize)]
pub struct WsResponse {
    jsonrpc: String,
    result: String,
    id: i32,
}

对于有效的答案,工作正常,但是如何处理JsonRpc响应的错误大小写,如下所示:

代码语言:javascript
复制
#[derive(Deserialize)]
pub struct JsonRpcError{
    code: i32,
    message: String,
}

#[derive(Deserialize)]
pub struct WsResponseErr {
    jsonrpc: String,
    error: JsonRpcError,
    id: i32,
}

我能在Json结构上做些什么匹配吗?作为附加问题:是否有可能用与字符串不同的结果类型解析有效的响应?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-30 10:35:14

应该对这两种类型使用包装器,并为untagged添加serde属性。

代码语言:javascript
复制
#[derive(Deserialize)]
#[serde(untagged)]
pub enum JsonRpcResult {
    Ok(WsResponse),
    Err(WsResponseErr),
}

是否有可能用与字符串不同的结果类型解析有效的响应?

是的,我强烈建议您在那里使用自定义类型。您可以使用实现Deserialize特性的任何类型而不是String。您可以阅读这里如何实现Deserialize,或者只对您的结构使用derive --您已经这样做了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61836751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档