1use thiserror::Error;
3use std::io;
4use anyhow::Error as AnyhowError;
5use hex::FromHexError;
6#[derive(Error, Debug)]
8pub enum ShiaError {
9 #[error("IO error: {0}")]
11 Io(#[from] io::Error),
12 #[error("Invalid VarInt")]
14 InvalidVarInt,
15 #[error("Invalid flags: {0}")]
17 InvalidFlags(u8),
18 #[error("Invalid version")]
20 InvalidVersion,
21 #[error("Verification failed: {0}")]
23 Verification(String),
24 #[error("Atomic mismatch: unrelated tx")]
26 AtomicMismatch,
27 #[error("Missing sibling in BUMP")]
29 MissingSibling,
30 #[error("Leaf not found in BUMP")]
32 LeafNotFound,
33 #[error("Script evaluation failed: {0}")]
35 ScriptEval(String),
36 #[error("Invalid tree height: {0}")]
38 InvalidTreeHeight(u8),
39 #[error("BUMP merge mismatch: {0}")]
41 MergeMismatch(&'static str),
42 #[error("Parse error: {0}")]
44 Parse(&'static str),
45}
46impl From<AnyhowError> for ShiaError {
47 fn from(err: AnyhowError) -> Self {
48 ShiaError::Verification(err.to_string())
49 }
50}
51impl From<FromHexError> for ShiaError {
52 fn from(err: FromHexError) -> Self {
53 ShiaError::Verification(err.to_string())
54 }
55}
56pub type Result<T> = std::result::Result<T, ShiaError>;