use crate::config::advanced::auth::AuthConfig;
use crate::config::advanced::cors::CorsConfig;
use crate::http::TlsServerConfig;
use serde::{Deserialize, Serialize};
use std::net::SocketAddr;
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(default, deny_unknown_fields)]
pub struct TicketServerConfig {
addr: SocketAddr,
#[serde(skip_serializing)]
tls: Option<TlsServerConfig>,
cors: CorsConfig,
#[serde(skip_serializing)]
pub(crate) auth: Option<AuthConfig>,
}
impl TicketServerConfig {
pub fn new(
addr: SocketAddr,
tls: Option<TlsServerConfig>,
cors: CorsConfig,
auth: Option<AuthConfig>,
) -> Self {
Self {
addr,
tls,
cors,
auth,
}
}
pub fn addr(&self) -> SocketAddr {
self.addr
}
pub fn tls(&self) -> Option<&TlsServerConfig> {
self.tls.as_ref()
}
pub fn cors(&self) -> &CorsConfig {
&self.cors
}
pub fn auth(&self) -> Option<&AuthConfig> {
self.auth.as_ref()
}
pub fn set_auth(&mut self, auth: Option<AuthConfig>) {
self.auth = auth;
}
pub fn into_tls(self) -> Option<TlsServerConfig> {
self.tls
}
}
impl Default for TicketServerConfig {
fn default() -> Self {
Self {
addr: default_addr().parse().expect("expected valid address"),
tls: Default::default(),
cors: Default::default(),
auth: None,
}
}
}
fn default_addr() -> &'static str {
"127.0.0.1:8080"
}
#[cfg(test)]
mod tests {
use super::*;
use crate::config::tests::test_serialize_and_deserialize;
#[test]
fn data_server() {
test_serialize_and_deserialize(
r#"
addr = "127.0.0.1:8083"
cors.max_age = 1
"#,
("127.0.0.1:8083".to_string(), 1),
|result: TicketServerConfig| (result.addr().to_string(), result.cors.max_age()),
);
}
}