use std::net::SocketAddr;
use liburing::{Proactor, SubsystemId};
use super::{driver::HttpServer, service::HttpService};
use crate::{Result, TlsServerConfig};
#[derive(Clone, Debug)]
pub struct ServerConfig {
pub max_header_list_size: usize,
pub max_body_size: usize,
pub tls: Option<TlsServerConfig>,
pub net_subsystem: SubsystemId,
pub backlog: i32,
pub io_buffer_size: usize,
}
impl Default for ServerConfig {
fn default() -> Self {
Self {
max_header_list_size: 16 * 1024,
max_body_size: 16 * 1024 * 1024,
tls: None,
net_subsystem: SubsystemId::new_unchecked(3),
backlog: 128,
io_buffer_size: 16 * 1024,
}
}
}
pub struct ServerBuilder<S> {
service: S,
config: ServerConfig,
}
impl<S> ServerBuilder<S> {
#[must_use]
pub fn new(service: S) -> Self {
Self {
service,
config: ServerConfig::default(),
}
}
#[must_use]
pub fn config(mut self, config: ServerConfig) -> Self {
self.config = config;
self
}
}
impl<S: HttpService + 'static> ServerBuilder<S> {
pub fn bind(self, proactor: &mut Proactor, addr: SocketAddr) -> Result<HttpServer<S>> {
HttpServer::bind(proactor, addr, self.config, self.service)
}
}