gpt4 book ai didi

rust - 如何在返回 Result<() , Error> 的函数中从 Serde 返回错误

转载 作者:行者123 更新时间:2023-12-03 11:35:56 24 4
gpt4 key购买 nike

我正在尝试使用返回 Result<(), Error> 的函数从 Serde 返回错误。 :

use std::io::{Error};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Mine {
ab: u8,
ac: u8,
}
#[macro_use]
extern crate serde_derive;

fn main() {
if do_match().is_ok() {
println!("Success");
}
}

fn do_match() -> Result<(), Error> {
match serde_json::from_str::<Mine>("test") {
Ok(_e) => println!("Okay"),
Err(e) => return e,
}
Ok(())
}

Rust Playground

经过各种尝试,一直无法纠正问题返回错误,我该怎么办?

最佳答案

首先,您使用了错误的错误类型。 serde_json::from_strErr类型为 serde_json::error::Error而您使用的是 std::io::Error .其次,通过 Err(e) 上的模式匹配然后尝试 return e ,您不再返回 Result而是试图只返回 serde_json::error::Error 类型的东西.相反,您应该返回 Result<(), serde_json::error::Error> .这是完成您想要实现的目标的正确方法:

fn do_match() -> Result <(), serde_json::error::Error> {
serde_json::from_str::<Mine>("test").map(|_| println!("Okay"))
}
map只会执行 println!(...)来自 serde_json::from_str 的结果如果是 Ok变体,否则,它只会通过 Err变体。然后,您可以只返回结果表达式。

Rust Playground

关于rust - 如何在返回 Result<() , Error> 的函数中从 Serde 返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59710923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com