use crate::{
consensus::{StateMachineHeight, StateMachineId},
host::StateMachine,
router::{GetRequest, GetResponse, PostRequest, Request},
};
use alloc::vec::Vec;
use codec::{Decode, DecodeWithMemTracking, Encode};
use primitive_types::H256;
use scale_info::TypeInfo;
#[derive(Clone, Debug, TypeInfo, Encode, Decode, serde::Deserialize, serde::Serialize)]
pub struct StateMachineUpdated {
pub state_machine_id: StateMachineId,
pub latest_height: u64,
}
#[derive(
Clone,
Debug,
TypeInfo,
Encode,
Decode,
DecodeWithMemTracking,
serde::Deserialize,
serde::Serialize,
)]
pub struct StateCommitmentVetoed {
pub height: StateMachineHeight,
#[serde(with = "serde_hex_utils::as_hex")]
pub fisherman: Vec<u8>,
}
#[derive(
Clone,
Debug,
TypeInfo,
Encode,
Decode,
DecodeWithMemTracking,
serde::Deserialize,
serde::Serialize,
PartialEq,
Eq,
)]
pub struct RequestResponseHandled {
pub commitment: H256,
#[serde(with = "serde_hex_utils::as_hex")]
pub relayer: Vec<u8>,
}
#[derive(
Clone,
Debug,
TypeInfo,
Encode,
Decode,
DecodeWithMemTracking,
serde::Deserialize,
serde::Serialize,
PartialEq,
Eq,
)]
pub struct TimeoutHandled {
pub commitment: H256,
#[serde(with = "serde_hex_utils::as_string")]
pub source: StateMachine,
#[serde(with = "serde_hex_utils::as_string")]
pub dest: StateMachine,
}
#[derive(Clone, Debug, TypeInfo, Encode, Decode, serde::Deserialize, serde::Serialize)]
pub enum Event {
StateMachineUpdated(StateMachineUpdated),
StateCommitmentVetoed(StateCommitmentVetoed),
PostRequest(PostRequest),
GetResponse(GetResponse),
GetRequest(GetRequest),
PostRequestHandled(RequestResponseHandled),
PostRequestTimeoutHandled(TimeoutHandled),
GetRequestHandled(RequestResponseHandled),
GetRequestTimeoutHandled(TimeoutHandled),
}
#[derive(
Clone, Debug, TypeInfo, Encode, Decode, serde::Deserialize, serde::Serialize, PartialEq, Eq,
)]
pub struct Meta {
pub source: StateMachine,
pub dest: StateMachine,
pub nonce: u64,
}
impl From<&Request> for Meta {
fn from(value: &Request) -> Self {
Self { source: value.source_chain(), dest: value.dest_chain(), nonce: value.nonce() }
}
}
impl From<&GetResponse> for Meta {
fn from(value: &GetResponse) -> Self {
Self { source: value.source_chain(), dest: value.dest_chain(), nonce: value.nonce() }
}
}
impl From<Request> for Meta {
fn from(value: Request) -> Self {
Self { source: value.source_chain(), dest: value.dest_chain(), nonce: value.nonce() }
}
}
impl From<GetResponse> for Meta {
fn from(value: GetResponse) -> Self {
Self { source: value.source_chain(), dest: value.dest_chain(), nonce: value.nonce() }
}
}
impl From<&crate::router::PostRequest> for Meta {
fn from(value: &crate::router::PostRequest) -> Self {
Self { source: value.source, dest: value.dest, nonce: value.nonce }
}
}
impl From<&crate::router::GetRequest> for Meta {
fn from(value: &crate::router::GetRequest) -> Self {
Self { source: value.source, dest: value.dest, nonce: value.nonce }
}
}