use crate::{ChainId, KeyMetadata, MessageId, MessageStatus, Result, StateKey, StateValue};
use async_trait::async_trait;
use bytes::Bytes;
#[derive(Debug, Clone, Default)]
pub struct SendOptions {
pub gas_limit: Option<u64>,
pub nonce: Option<u64>,
pub refund_address: Option<[u8; 20]>,
pub max_fee_per_gas: Option<u128>,
pub max_priority_fee_per_gas: Option<u128>,
pub value: Option<u128>,
}
#[async_trait]
pub trait MessagingTransport: Send + Sync {
async fn send_message(
&self,
destination: ChainId,
payload: Bytes,
options: SendOptions,
) -> Result<MessageId>;
async fn estimate_fee(&self, destination: ChainId, payload: Bytes) -> Result<u128>;
async fn message_status(&self, id: MessageId) -> Result<MessageStatus>;
fn sender_address(&self) -> Option<[u8; 20]>;
async fn poll_incoming(&self) -> Result<Vec<(StateKey, StateValue, Option<KeyMetadata>)>>;
}