pub struct UnescapeError { /* private fields */ }
Expand description
An error that can occur during the JSON string unescaping process.
Implementations§
Source§impl UnescapeError
impl UnescapeError
Sourcepub fn kind(&self) -> UnescapeErrorKind
pub fn kind(&self) -> UnescapeErrorKind
Returns the specific kind of error that occurred.
This can be used to programmatically handle different error types, such as distinguishing between a malformed hex sequence and an invalid escape character.
§Example
let mut unescaper = unescape(r#"\u123Z"#);
let err = unescaper.next().unwrap().unwrap_err();
match err.kind() {
UnescapeErrorKind::InvalidHex(InvalidHexError { found, .. }) => {
// We can inspect the exact invalid character found.
assert_eq!(found, b'Z');
}
_ => panic!("Expected an InvalidHex error"),
}
Sourcepub fn offset(&self) -> u8
pub fn offset(&self) -> u8
Returns the byte offset from the start of the escape sequence (\
)
where the error was detected.
- For
\x
, the offset is1
(pointing tox
). - For
\u123?
, the offset is5
(pointing to?
). - For a lone surrogate
\uD800
, the offset is6
(pointing after the sequence).
This is useful for providing detailed error messages that can point to the exact location of the problem in the source string.
§Example
let json_string_content = r#"bad escape \x here"#;
let mut unescaper = unescape(json_string_content);
// read off 'bad escape '
let first = unescaper.next().unwrap().unwrap();
assert_eq!(first, b"bad escape ");
let err = unescaper.next().unwrap().unwrap_err();
// The error occurred at the 'x', which is 1 byte after the '\'
assert_eq!(err.offset(), 1);
// You could use this to highlight the error in the original input
let backslash_pos = json_string_content.find('\\').unwrap();
let error_pos = backslash_pos + err.offset() as usize;
assert_eq!(json_string_content.as_bytes()[error_pos], b'x');
// The generated error message also includes this info.
let expected_msg = "invalid escape: '\\0x78' at offset 1";
assert_eq!(err.to_string(), expected_msg);
Trait Implementations§
Source§impl Clone for UnescapeError
impl Clone for UnescapeError
Source§fn clone(&self) -> UnescapeError
fn clone(&self) -> UnescapeError
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for UnescapeError
impl Debug for UnescapeError
Source§impl Display for UnescapeError
impl Display for UnescapeError
Source§impl Error for UnescapeError
impl Error for UnescapeError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
Source§impl PartialEq for UnescapeError
impl PartialEq for UnescapeError
impl Copy for UnescapeError
impl Eq for UnescapeError
impl StructuralPartialEq for UnescapeError
Auto Trait Implementations§
impl Freeze for UnescapeError
impl RefUnwindSafe for UnescapeError
impl Send for UnescapeError
impl Sync for UnescapeError
impl Unpin for UnescapeError
impl UnwindSafe for UnescapeError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more