libserialize: add error()
to Decoder
A quick and dirty fix for #15036 until we get serious decoder reform. Right now it is impossible for a Decodable to signal a decode error, for example if it has only finitely many allowed values, is a string which must be encoded a certain way, needs a valid checksum, etc. For example in the libuuid implementation of Decodable an Option is unwrapped, meaning that a decode of a malformed UUID will cause the task to fail. Since this adds a method to the `Decoder` trait, all users will need to update their implementations to add it. The strategy used for the current implementations for JSON and EBML is to add a new entry to the error enum `ApplicationError(String)` which stores the string provided to `.error()`. [breaking-change]
This commit is contained in:
parent
b495933a7f
commit
5bd8edc112
3 changed files with 19 additions and 6 deletions
|
@ -257,6 +257,7 @@ pub enum DecoderError {
|
|||
ExpectedError(String, String),
|
||||
MissingFieldError(String),
|
||||
UnknownVariantError(String),
|
||||
ApplicationError(String)
|
||||
}
|
||||
|
||||
/// Returns a readable error string for a given error code.
|
||||
|
@ -2071,6 +2072,10 @@ impl ::Decoder<DecoderError> for Decoder {
|
|||
debug!("read_map_elt_val(idx={})", idx);
|
||||
f(self)
|
||||
}
|
||||
|
||||
fn error(&mut self, err: &str) -> DecoderError {
|
||||
ApplicationError(err.to_string())
|
||||
}
|
||||
}
|
||||
|
||||
/// A trait for converting values to JSON
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue