#![allow(unused)]
use crate::{
consensus::{ConsensusClientId, ConsensusStateId, StateMachineHeight, StateMachineId},
events::Meta,
};
use alloc::{
string::{String, ToString},
vec::Vec,
};
use codec::{Decode, Encode};
use core::time::Duration;
use scale_info::TypeInfo;
#[derive(Debug, Eq, PartialEq, Encode, Decode, TypeInfo, displaydoc::Display, thiserror::Error)]
pub enum Error {
UnbondingPeriodElapsed {
consensus_state_id: ConsensusStateId,
},
ChallengePeriodNotElapsed {
state_machine_id: StateMachineId,
update_time: Duration,
current_time: Duration,
},
ConsensusStateNotFound {
consensus_state_id: ConsensusStateId,
},
StateCommitmentNotFound {
height: StateMachineHeight,
},
FrozenConsensusClient {
consensus_state_id: ConsensusStateId,
},
RequestCommitmentNotFound {
meta: Meta,
},
RequestVerificationFailed {
meta: Meta,
},
RequestTimeoutNotElapsed {
meta: Meta,
timeout_timestamp: Duration,
state_machine_time: Duration,
},
RequestTimeoutVerificationFailed {
meta: Meta,
},
ResponseVerificationFailed {
meta: Meta,
},
ConsensusProofVerificationFailed {
id: ConsensusClientId,
},
ExpiredConsensusClient {
id: ConsensusClientId,
},
CannotHandleMessage,
EmptyBatch,
MembershipProofVerificationFailed(String),
NonMembershipProofVerificationFailed(String),
Custom(String),
CannotCreateAlreadyExistingConsensusClient {
id: ConsensusClientId,
},
InsufficientProofHeight,
ModuleNotFound(Vec<u8>),
ConsensusStateIdNotRecognized {
consensus_state_id: ConsensusStateId,
},
ChallengePeriodNotConfigured {
state_machine: StateMachineId,
},
DuplicateConsensusStateId {
consensus_state_id: ConsensusStateId,
},
UnnbondingPeriodNotConfigured {
consensus_state_id: ConsensusStateId,
},
ModuleDispatchError {
msg: String,
meta: Meta,
},
UnknownRequest {
meta: Meta,
},
GetResponseAlreadyReceived {
meta: Meta,
},
UnknownResponse {
meta: Meta,
},
UnsolicitedResponse {
meta: Meta,
},
RequestTimeout {
meta: Meta,
},
ResponseTimeout {
response: Meta,
},
DuplicateRequest {
meta: Meta,
},
DuplicateResponse {
meta: Meta,
},
RequestProofMetadataNotValid {
meta: Meta,
},
RequestProxyProhibited {
meta: Meta,
},
ResponseProxyProhibited {
meta: Meta,
},
InvalidRequestDestination {
meta: Meta,
},
InvalidResponseDestination {
meta: Meta,
},
SignatureDecodingFailed,
AnyHow(AnyhowError),
}
#[derive(Debug)]
pub struct AnyhowError(pub anyhow::Error);
impl core::fmt::Display for AnyhowError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
core::fmt::Display::fmt(&self.0, f)
}
}
impl PartialEq for AnyhowError {
fn eq(&self, other: &Self) -> bool {
self.0.to_string() == other.0.to_string()
}
}
impl Eq for AnyhowError {}
impl Encode for AnyhowError {
fn encode_to<W: codec::Output + ?Sized>(&self, dest: &mut W) {
self.0.to_string().encode_to(dest)
}
}
impl Decode for AnyhowError {
fn decode<I: codec::Input>(input: &mut I) -> Result<Self, codec::Error> {
let s = String::decode(input)?;
Ok(Self(anyhow::Error::msg(s)))
}
}
impl TypeInfo for AnyhowError {
type Identity = String;
fn type_info() -> scale_info::Type {
String::type_info()
}
}
impl From<anyhow::Error> for AnyhowError {
fn from(e: anyhow::Error) -> Self {
Self(e)
}
}