#![allow(clippy::result_large_err)]
use std::convert::Infallible;
use std::io;
use amplify::IoError;
#[cfg(feature = "bp")]
use bpwallet::psbt::{ConstructionError, DecodeError};
use nonasync::persistence::PersistenceError;
use psrgbt::{CommitError, EmbedError, TapretKeyError};
use rgbstd::containers::LoadError;
use rgbstd::contract::{BuilderError, ContractError};
use rgbstd::persistence::{
ComposeError, ConsignError, FasciaError, Stock, StockError, StockErrorAll, StockErrorMem,
};
use rgbstd::validation::ValidationError;
use rgbstd::{AssignmentType, ChainNet};
use strict_types::encoding::Ident;
use crate::validation;
#[derive(Debug, Display, Error, From)]
#[display(inner)]
pub enum WalletError {
#[from]
#[from(io::Error)]
File(IoError),
#[from]
StockLoad(LoadError),
WalletPersist(PersistenceError),
StockPersist(PersistenceError),
#[cfg(feature = "cli")]
#[from]
WalletExec(bpwallet::cli::ExecError),
#[from]
Builder(BuilderError),
#[from]
Contract(ContractError),
Invoicing(String),
#[cfg(feature = "bp")]
#[from]
PsbtDecode(DecodeError),
#[display(doc_comments)]
WalletUnknown(Ident),
#[from]
InvalidConsignment(ValidationError),
#[from]
#[display(doc_comments)]
InvalidId(baid64::Baid64ParseError),
#[display(doc_comments)]
IncompleteContract(validation::Status),
NoTweakTerminal,
#[display(doc_comments)]
Resolver(String),
#[from(StockError)]
#[from(StockErrorAll)]
#[display(inner)]
Stock(String),
#[cfg(feature = "cli")]
#[from]
Yaml(serde_yaml::Error),
#[from]
Custom(String),
}
impl From<Infallible> for WalletError {
fn from(_: Infallible) -> Self { unreachable!() }
}
impl From<(Stock, WalletError)> for WalletError {
fn from((_, e): (Stock, WalletError)) -> Self { e }
}
#[allow(clippy::large_enum_variant)]
#[derive(Debug, Display, Error, From)]
pub enum PayError {
#[from]
#[display(inner)]
Composition(CompositionError),
#[display("{0}")]
Completion(CompletionError),
}
#[derive(Debug, Display, Error, From)]
#[display(doc_comments)]
pub enum CompositionError {
NoContract,
NoAssignmentType,
NoAssignmentState,
UnknownContract,
InsufficientState,
InvoiceExpired,
InvalidSchema,
InvoiceBeneficiaryWrongChainNet(ChainNet, ChainNet),
Unsupported,
#[cfg(feature = "bp")]
#[from]
#[display(inner)]
Construction(ConstructionError),
#[from]
#[display(inner)]
Contract(ContractError),
#[from]
#[display(inner)]
Embed(EmbedError),
NoExtraOrChange(AssignmentType),
NoOutputForTapretCommitment,
NoBeneficiaryOutput,
BeneficiaryVout,
TooManyExtras,
#[from]
#[display(inner)]
Builder(BuilderError),
#[from(String)]
#[from(StockError)]
#[from(StockErrorMem<ComposeError>)]
#[display(inner)]
Stock(String),
#[display(doc_comments)]
UnsupportedCloseMethod(String),
Unexpected(String),
}
#[derive(Debug, Display, Error, From)]
#[display(doc_comments)]
pub enum CompletionError {
NoContract,
NoBeneficiaryOutput,
InconclusiveDerivation,
#[from]
#[display(inner)]
TapretKey(TapretKeyError),
#[from]
#[display(inner)]
Commit(CommitError),
#[from(String)]
#[from(StockErrorMem<ConsignError>)]
#[from(StockErrorMem<FasciaError>)]
#[display(inner)]
Stock(String),
}
impl From<Infallible> for CompletionError {
fn from(_: Infallible) -> Self { unreachable!() }
}