use anyhow::Result;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use super::peer_table::PeerTable;
use crate::network::MessageEnvelope;
use crate::transport::TransportAddress;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RoutingStrategy {
Direct,
Broadcast,
ContentBased,
Custom(String),
}
#[async_trait]
pub trait Router: Send + Sync {
async fn route(
&self,
envelope: &MessageEnvelope,
peers: &PeerTable,
) -> Result<Vec<TransportAddress>>;
fn strategy(&self) -> RoutingStrategy;
}