1use std::{io, sync::Arc};
4use thiserror::Error;
5
6#[derive(Error, Copy, Clone, Debug, PartialEq, Eq)]
10pub enum RandError {
11 #[error("failed to generate a secure stream of random bytes")]
13 FillBytes,
14}
15
16#[derive(Error, Copy, Clone, Debug, PartialEq, Eq)]
18pub enum NoteError {
19 #[error("Randomness generation failure")]
21 InsufficientRandomness(#[from] RandError),
22 #[error("failed to generate an Orchard note's rho.")]
24 InvalidRho,
25}
26
27#[derive(Error, Copy, Clone, Debug, PartialEq, Eq)]
29pub enum NoteCommitmentError {
30 #[error("Randomness generation failure")]
32 InsufficientRandomness(#[from] RandError),
33 #[error("failed to generate a sapling::NoteCommitment from a diversifier")]
35 InvalidDiversifier,
36}
37
38#[derive(Error, Copy, Clone, Debug, PartialEq, Eq)]
41pub enum KeyError {
42 #[error("Randomness generation failure")]
44 InsufficientRandomness(#[from] RandError),
45}
46
47#[derive(Error, Copy, Clone, Debug, PartialEq, Eq)]
50pub enum AddressError {
51 #[error("Randomness generation failure")]
53 InsufficientRandomness(#[from] RandError),
54 #[error("Randomness did not hash into the Jubjub group for producing a new diversifier")]
56 DiversifierGenerationFailure,
57}
58
59#[derive(Clone, Error, Debug)]
61pub enum Error {
62 #[error("invalid consensus branch id")]
64 InvalidConsensusBranchId,
65
66 #[error("Zebra's type could not be converted to its librustzcash equivalent: {0}")]
68 Conversion(#[from] Arc<io::Error>),
69
70 #[error("the transaction is missing a network upgrade")]
72 MissingNetworkUpgrade,
73}
74
75impl From<io::Error> for Error {
78 fn from(value: io::Error) -> Self {
79 Arc::new(value).into()
80 }
81}
82
83impl PartialEq for Error {
86 fn eq(&self, other: &Self) -> bool {
87 match self {
88 Error::InvalidConsensusBranchId => matches!(other, Error::InvalidConsensusBranchId),
89 Error::Conversion(e) => {
90 if let Error::Conversion(o) = other {
91 e.to_string() == o.to_string()
94 } else {
95 false
96 }
97 }
98 Error::MissingNetworkUpgrade => matches!(other, Error::MissingNetworkUpgrade),
99 }
100 }
101}
102
103impl Eq for Error {}