use crate::{server::ServerConfig, VetisResult, VetisVirtualHosts};
use std::future::Future;
pub trait VetisServer {
type VirtualHost;
type VirtualHostConfig;
fn add_virtual_host(&mut self, virtual_host: Self::VirtualHost) -> impl Future<Output = ()>;
fn remove_virtual_host(&mut self, hostname: &str, port: u16) -> impl Future<Output = ()>;
fn virtual_hosts(&self) -> &VetisVirtualHosts<Self::VirtualHost>;
fn config(&self) -> &ServerConfig;
fn run(&mut self) -> impl Future<Output = VetisResult<()>>;
fn start(&mut self) -> impl Future<Output = VetisResult<()>>;
fn stop(&mut self) -> impl Future<Output = VetisResult<()>>;
fn reload(
&mut self,
new_config: ServerConfig,
new_virtual_hosts: Vec<Self::VirtualHostConfig>,
) -> impl Future<Output = VetisResult<()>>;
}