1use crate::validation_error::ValidationErr;
2use klvm_traits::{FromKlvmError, ToKlvmError};
3use klvmr::error::EvalErr;
4use thiserror::Error;
5
6#[cfg(feature = "py-bindings")]
7use pyo3::PyErr;
8
9#[derive(Debug, PartialEq, Error)]
10pub enum Error {
11 #[error("To KLVM {0}")]
12 ToKlvm(#[from] ToKlvmError),
13
14 #[error("From KLVM {0}")]
15 FromKlvm(#[from] FromKlvmError),
16
17 #[error("Eval {0}")]
18 Eval(#[from] EvalErr),
19
20 #[error("Validation {0}")]
21 Validation(#[from] ValidationErr),
22
23 #[error("BLS {0}")]
24 Bls(#[from] chik_bls::Error),
25
26 #[error("not a singleton mod hash")]
27 NotSingletonModHash,
28
29 #[error("inner puzzle hash mismatch")]
30 InnerPuzzleHashMismatch,
31
32 #[error("puzzle hash mismatch")]
33 PuzzleHashMismatch,
34
35 #[error("coin amount mismatch")]
36 CoinAmountMismatch,
37
38 #[error("coin amount is even")]
39 CoinAmountEven,
40
41 #[error("parent coin mismatch")]
42 ParentCoinMismatch,
43
44 #[error("coin mismatch")]
45 CoinMismatch,
46
47 #[error("expected lineage proof, found eve proof")]
48 ExpectedLineageProof,
49
50 #[error("{0}")]
51 Custom(String),
52}
53
54#[cfg(feature = "py-bindings")]
55impl From<Error> for PyErr {
56 fn from(err: Error) -> PyErr {
57 pyo3::exceptions::PyValueError::new_err(err.to_string())
58 }
59}
60
61pub type Result<T> = std::result::Result<T, Error>;