47 lines
1.6 KiB
Rust
47 lines
1.6 KiB
Rust
use std::{array::TryFromSliceError, io, num::TryFromIntError, str::Utf8Error};
|
|
|
|
use thiserror::Error;
|
|
|
|
/// A serialization error.
|
|
// XXX refine error types -- better to use boxed errors?
|
|
#[derive(Error, Debug)]
|
|
pub enum SerializationError {
|
|
/// An io error that prevented deserialization
|
|
#[error("io error: {0}")]
|
|
Io(#[from] io::Error),
|
|
|
|
/// The data to be deserialized was malformed.
|
|
// XXX refine errors
|
|
#[error("parse error: {0}")]
|
|
Parse(&'static str),
|
|
|
|
/// A string was not UTF-8.
|
|
///
|
|
/// Note: Rust `String` and `str` are always UTF-8.
|
|
#[error("string was not UTF-8: {0}")]
|
|
Utf8Error(#[from] Utf8Error),
|
|
|
|
/// A slice was an unexpected length during deserialization.
|
|
#[error("slice was the wrong length: {0}")]
|
|
TryFromSliceError(#[from] TryFromSliceError),
|
|
|
|
/// The length of a vec is too large to convert to a usize (and thus, too large to allocate on this platform)
|
|
#[error("CompactSize too large: {0}")]
|
|
TryFromIntError(#[from] TryFromIntError),
|
|
|
|
/// An error caused when validating a zatoshi `Amount`
|
|
#[error("input couldn't be parsed as a zatoshi `Amount`: {source}")]
|
|
Amount {
|
|
/// The source error indicating how the num failed to validate
|
|
#[from]
|
|
source: crate::amount::Error,
|
|
},
|
|
|
|
/// Invalid transaction with a non-zero balance and no Sapling shielded spends or outputs.
|
|
///
|
|
/// Transaction does not conform to the Sapling [consensus
|
|
/// rule](https://zips.z.cash/protocol/protocol.pdf#txnencodingandconsensus).
|
|
#[error("transaction balance is non-zero but doesn't have Sapling shielded spends or outputs")]
|
|
BadTransactionBalance,
|
|
}
|