我使用xml-rs
來做一些xml解析,並且有一些特殊情況下我想發出自定義xml::reader::Error
。此錯誤結構實現爲:使用xml-rs xml :: reader :: Error返回自定義錯誤
pub struct Error {
pos: TextPosition,
kind: ErrorKind,
}
pos
和kind
屬性是私有的,所以我不能手動實例化一個Error
,並沒有new()
方法或類似的東西。
我這是什麼From
實現:
impl<'a, P, M> From<(&'a P, M)> for Error where P: Position, M: Into<Cow<'static, str>> {
fn from(orig: (&'a P, M)) -> Self {
Error{
pos: orig.0.position(),
kind: ErrorKind::Syntax(orig.1.into())
}
}
}
我可以用它來實例化一個自定義錯誤,我需要一個P
這意味着它實現xml::common::Position
性狀的類型和M
這是一個Into<Cow<'static, str>>
。
對於,P
,我想我可以使用xml::reader::EventReader
,因爲它實現xml::common::Position
。但我不知道如何獲得Into<Cow<'static, str>>
。
我試圖做這樣的事情:
(event_reader, "custom error").into()
但它不工作,我想是因爲"custom error"
不能轉換到Into<Cow<'static, str>>
或類似的東西。
我收到的錯誤消息是這一個:
error[E0277]: the trait bound `xml::reader::Error: std::convert::From<(xml::EventReader<std::io::BufReader<&[u8]>>, &str)>` is not satisfied
--> src/main.rs:234:78
|
234 | _ => return Err((event_reader, "custom error").into()),
| ^^^^ the trait `std::convert::From<(xml::EventReader<std::io::BufReader<&[u8]>>, &str)>` is not implemented for `xml::reader::Error`
|
= help: the following implementations were found:
<xml::reader::Error as std::convert::From<(&'a P, M)>>
<xml::reader::Error as std::convert::From<xml::util::CharReadError>>
<xml::reader::Error as std::convert::From<std::io::Error>>
= note: required because of the requirements on the impl of `std::convert::Into<xml::reader::Error>` for `(xml::EventReader<std::io::BufReader<&[u8]>>, &str)`
可以看出,從錯誤,鏽就是沒辦法把我(event_reader, "custom error")
元組轉換爲可用xml::reader::Error as std::convert::From<(&'a P, M)>
實施。
這就是我想知道爲什麼以及如何解決。
你並不擁有'XML :: Error',所以創建錯誤的定製情況不健全的權利。實際上建議您推出自己的錯誤類型。 –
另外,請在這些代碼片段中包含編譯器的錯誤消息。 –
Hello @ E_net4我在主要問題信息中添加了錯誤信息。另外,我知道我可以創建自己的錯誤類型,現在這是我用來處理代碼的解決方法..但是對於這種情況,我想使用'xml :: reader :: Error',因爲我看到這個錯誤作爲xml語法錯誤。 – Sassa