use miden_objects::account::AccountId;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, MultisigError>;
#[derive(Debug, Error)]
pub enum MultisigError {
#[error("account not found: {0}")]
AccountNotFound(AccountId),
#[error("proposal not found: {0}")]
ProposalNotFound(String),
#[error("PSM connection error: {0}")]
PsmConnection(String),
#[error("PSM server error: {0}")]
PsmServer(String),
#[error("miden client error: {0}")]
MidenClient(String),
#[error("sync panicked (corrupted local state): {0}")]
SyncPanicked(String),
#[error("transaction execution failed: {0}")]
TransactionExecution(String),
#[error("invalid configuration: {0}")]
InvalidConfig(String),
#[error("signature error: {0}")]
Signature(String),
#[error("serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("not a cosigner for this account")]
NotCosigner,
#[error("already signed this proposal")]
AlreadySigned,
#[error("proposal not ready: need {required} signatures, have {collected}")]
ProposalNotReady { required: usize, collected: usize },
#[error("key manager not configured")]
NoKeyManager,
#[error("missing required configuration: {0}")]
MissingConfig(String),
#[error("hex decode error: {0}")]
HexDecode(String),
#[error("account storage error: {0}")]
AccountStorage(String),
#[error("transaction executed successfully when failure was expected")]
UnexpectedSuccess,
#[error("unknown transaction type: {0}")]
UnknownTransactionType(String),
#[error("invalid filter: {0}")]
InvalidFilter(String),
}
impl From<private_state_manager_client::ClientError> for MultisigError {
fn from(err: private_state_manager_client::ClientError) -> Self {
MultisigError::PsmServer(err.to_string())
}
}
impl From<miden_client::ClientError> for MultisigError {
fn from(err: miden_client::ClientError) -> Self {
MultisigError::MidenClient(err.to_string())
}
}
impl From<miden_client::transaction::TransactionRequestError> for MultisigError {
fn from(err: miden_client::transaction::TransactionRequestError) -> Self {
MultisigError::TransactionExecution(err.to_string())
}
}
impl From<miden_client::transaction::TransactionExecutorError> for MultisigError {
fn from(err: miden_client::transaction::TransactionExecutorError) -> Self {
MultisigError::TransactionExecution(err.to_string())
}
}