use crate::transaction::Transaction;
use async_trait::async_trait;
#[derive(Debug, Clone, Default)]
pub struct BroadcastResponse {
pub status: String,
pub txid: String,
pub message: String,
pub competing_txs: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default)]
pub struct BroadcastFailure {
pub status: u32,
pub code: String,
pub description: String,
pub txid: Option<String>,
pub competing_txs: Option<Vec<String>>,
pub more: Option<serde_json::Value>,
}
#[async_trait]
pub trait Broadcaster: Send + Sync {
async fn broadcast(&self, tx: &Transaction) -> Result<BroadcastResponse, BroadcastFailure>;
}