use crate::host::StateMachine;
use alloc::vec::Vec;
use codec::{Decode, Encode};
use primitive_types::H256;
#[derive(Clone)]
pub struct DispatchPost {
pub dest: StateMachine,
pub from: Vec<u8>,
pub to: Vec<u8>,
pub timeout: u64,
pub body: Vec<u8>,
}
#[derive(Clone)]
pub struct DispatchGet {
pub dest: StateMachine,
pub from: Vec<u8>,
pub keys: Vec<Vec<u8>>,
pub height: u64,
pub context: Vec<u8>,
pub timeout: u64,
}
#[derive(Clone)]
pub enum DispatchRequest {
Post(DispatchPost),
Get(DispatchGet),
}
#[derive(
Debug,
Default,
Clone,
Copy,
Encode,
Decode,
scale_info::TypeInfo,
PartialEq,
Eq,
derive_more::From,
)]
#[cfg_attr(feature = "std", derive(serde::Deserialize, serde::Serialize))]
pub struct FeeMetadata<A, B> {
pub payer: A,
pub fee: B,
}
pub trait IsmpDispatcher: Default {
type Account;
type Balance;
fn dispatch_request(
&self,
request: DispatchRequest,
fee: FeeMetadata<Self::Account, Self::Balance>,
) -> Result<H256, anyhow::Error>;
}