Ham*_*mza 3 rust serde serde-json
我希望反序列化使空数组失败。以下代码有效,但我想让这个特定案例失败:
use serde::Deserialize;
#[derive(Debug)]
#[derive(Deserialize)]
struct Doc {
nums: Vec<i32>
}
fn main(){
let data = r#"
{"nums": []}
"#;
let doc: Doc = serde_json::from_str(data).unwrap();
dbg!(doc);
}
Run Code Online (Sandbox Code Playgroud)
有什么选择可以实现这一目标?
您可以使用自定义deserialize_with函数
use serde::{de::Deserializer, de::Error, Deserialize};
#[derive(Debug, Deserialize)]
struct Doc {
#[serde(deserialize_with = "non_empty")]
nums: Vec<i32>,
}
fn non_empty<'de, D, T>(d: D) -> Result<Vec<T>, D::Error>
where
D: Deserializer<'de>,
T: Deserialize<'de>,
{
let vec = <Vec<T>>::deserialize(d)?;
if vec.is_empty() {
Err(D::Error::custom("need non-empty"))
} else {
Ok(vec)
}
}
fn main() {
let data = r#"
{"nums": []}
"#;
let doc: Doc = serde_json::from_str(data).unwrap();
dbg!(doc);
}
Run Code Online (Sandbox Code Playgroud)