pub mod relay_none;
pub mod relay_range;
pub mod relay_static;
use std::net::SocketAddr;
use std::sync::Arc;
use async_trait::async_trait;
use util::Conn;
use crate::error::Result;
#[async_trait]
pub trait RelayAddressGenerator {
fn validate(&self) -> Result<()>;
async fn allocate_conn(
&self,
use_ipv4: bool,
requested_port: u16,
) -> Result<(Arc<dyn Conn + Send + Sync>, SocketAddr)>;
}