pub enum ToJsonError {
FormatError,
DeserialError {
position: u32,
schema: Type,
reason: String,
data: ToJsonErrorData,
},
TraceError {
position: u32,
schema: Type,
error: Box<ToJsonError>,
},
}
Expand description
Represents errors occurring while deserializing to the schema JSON format.
§Examples
§Simple type from invalid byte sequence
let account_bytes = [0u8; ACCOUNT_ADDRESS_SIZE];
let mut cursor = Cursor::new(&account_bytes[..30]); // Malformed account address
let schema = Type::AccountAddress;
let err = schema.to_json(&mut cursor).expect_err("Deserializing should fail");
assert!(matches!(err, ToJsonError::DeserialError {
position: 0,
schema: Type::AccountAddress,
..
}))
§Complex type from invalid byte sequence
let account_bytes = [0u8; ACCOUNT_ADDRESS_SIZE];
let mut list_bytes = vec![2, 0]; // 2 items in the list
list_bytes.extend_from_slice(&account_bytes); // Correct account address
list_bytes.extend_from_slice(&account_bytes[..30]); // Malformed account address
let mut cursor = Cursor::new(list_bytes);
let schema = Type::List(SizeLength::U8, Box::new(Type::AccountAddress));
let err = schema.to_json(&mut cursor).expect_err("Deserializing should fail");
assert!(matches!(
err,
ToJsonError::TraceError {
position: 0,
schema: Type::List(_, _),
error,
} if matches!(
*error,
ToJsonError::DeserialError {
position: 33,
schema: Type::AccountAddress, ..
}
)
))
Variants§
FormatError
JSON formatter failed to represent value.
DeserialError
Failed to deserialize data to type expected from schema.
TraceError
Trace leading to the original ToJsonError.
Implementations§
source§impl ToJsonError
impl ToJsonError
sourcepub fn display(&self, verbose: bool) -> String
pub fn display(&self, verbose: bool) -> String
Returns a formatted error message for variant.
ToJsonError::TraceError
supports printing a verbose form
including a more detailed description of the error stack, which is
returned if verbose
is set to true.
§Examples
§Display error from failing to deserialize to list of objects
let account_bytes = [0u8; ACCOUNT_ADDRESS_SIZE];
let contract_bytes = [0u8; 16];
let mut list_bytes = vec![2, 0];
list_bytes.extend_from_slice(&account_bytes);
list_bytes.extend_from_slice(&contract_bytes);
// r#"<error-message>
// In deserializing position <cursor-position> into type Struct(...)
// In deserializing position <cursor-position> into type List(...)"#;
list_bytes.extend_from_slice(&account_bytes);
list_bytes.extend_from_slice(&contract_bytes[..10]); // Malformed contract address.
let mut cursor = Cursor::new(list_bytes.clone());
let schema_object = Type::Struct(Fields::Named(vec![
("a".into(), Type::AccountAddress),
("b".into(), Type::ContractAddress),
]));
let schema = Type::List(SizeLength::U8, Box::new(schema_object));
let err = schema.to_json(&mut cursor)
.expect_err("Deserializing should fail");
// The error format points to the position in the byte sequence that
// failed to deserialize:
err.display(false); // "List(...) -> Struct(...) -> <error-message>");
// Or if verbose, includes a stacktrace-like format, similar to:
// r#"<error-message>
// In deserializing position <cursor-position> into type Struct(...)
// In deserializing position <cursor-position> into type List(...)"#;
err.display(true);
sourcepub fn get_error(&self) -> &Self
pub fn get_error(&self) -> &Self
Gets the underlying error of a ToJsonError::TraceError
. For any
other variant, this simply returns the error itself.
Trait Implementations§
source§impl Clone for ToJsonError
impl Clone for ToJsonError
source§fn clone(&self) -> ToJsonError
fn clone(&self) -> ToJsonError
Returns a copy 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 ToJsonError
impl Debug for ToJsonError
source§impl Display for ToJsonError
impl Display for ToJsonError
source§impl Error for ToJsonError
impl Error for ToJsonError
1.30.0 · source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
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()
Auto Trait Implementations§
impl Freeze for ToJsonError
impl RefUnwindSafe for ToJsonError
impl Send for ToJsonError
impl Sync for ToJsonError
impl Unpin for ToJsonError
impl UnwindSafe for ToJsonError
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