use std::sync::Arc;
use tokio::sync::mpsc;
use tokio::time::Duration;
use util::Conn;
use crate::allocation::*;
use crate::auth::*;
use crate::error::*;
use crate::relay::*;
pub struct ConnConfig {
pub conn: Arc<dyn Conn + Send + Sync>,
pub relay_addr_generator: Box<dyn RelayAddressGenerator + Send + Sync>,
}
impl ConnConfig {
pub fn validate(&self) -> Result<()> {
self.relay_addr_generator.validate()
}
}
pub struct ServerConfig {
pub conn_configs: Vec<ConnConfig>,
pub realm: String,
pub auth_handler: Arc<dyn AuthHandler + Send + Sync>,
pub channel_bind_timeout: Duration,
pub alloc_close_notify: Option<mpsc::Sender<AllocationInfo>>,
}
impl ServerConfig {
pub fn validate(&self) -> Result<()> {
if self.conn_configs.is_empty() {
return Err(Error::ErrNoAvailableConns);
}
for cc in &self.conn_configs {
cc.validate()?;
}
Ok(())
}
}