我依靠rustc_serialize
將JSON數據解析爲一個結構,Orders
,它代表Vec
的Order
結構。 JSON數據可能有一個數組或一個null
值;我的意圖是要麼解析正常的訂單數組(如果有的話),要麼將null
的值解析爲Orders
,並且使用空的Vec
。如果這兩種情況都不是這種情況,那麼就會傳遞一個錯誤。這是我的嘗試:在關聯類型的實例上模式匹配的難度
impl Decodable for Orders {
fn decode<D: Decoder>(d: &mut D) -> Result<Self, D::Error> {
let try = d.read_seq(|d, l| {
let mut orders = Vec::new();
for _ in 0..l {
let order = try!(Decodable::decode(d));
orders.push(order);
}
Ok(Orders(orders))
});
match try {
value @ Ok(_) => value,
error @ Err(e) => match e {
ExpectedError(_, x) if &x == "null" => Ok(Orders(Vec::new())),
_ => error,
},
}
}
}
我的問題與ExpectedError
上的模式匹配有關。編譯器給我以下錯誤:
expected `<D as rustc_serialize::serialize::Decoder>::Error`,
found `rustc_serialize::json::DecoderError`
(expected associated type,
found enum `rustc_serialize::json::DecoderError`) [E0308]
src/api/types/json.rs:125 ExpectedError(_, x) if &x == "null" => Ok(Orders(Vec::new())),
^~~~~~~~~~~~~~~~~~~
我難住這一個。我該如何解決這個問題?
你是否設法解決這個問題?如果是的話,我會高度讚賞一些更多的細節。謝謝 – maximi