use crate::msg::server_api::ServerInfo;
#[derive(Debug, PartialEq, Clone)]
pub struct ExtSettings {
log_level: String,
server_info: ServerInfo,
}
pub struct ExtSettingsBuilder {
log_level: String,
server_info: Option<ServerInfo>,
}
impl ExtSettingsBuilder {
fn new() -> Self {
Self {
log_level: "INFO".to_string(),
server_info: None,
}
}
pub fn log_level(mut self, log_level: &str) -> Self {
self.log_level = log_level.to_string();
self
}
pub fn server_info(mut self, server_info: ServerInfo) -> Self {
self.server_info = Some(server_info);
self
}
pub fn build(self) -> ExtSettings {
ExtSettings {
log_level: self.log_level,
server_info: self.server_info.expect("Server info must be set"),
}
}
}
impl ExtSettings {
pub fn log_level(&self) -> &str {
&self.log_level
}
pub fn server_info(&self) -> &ServerInfo {
&self.server_info
}
pub fn builder() -> ExtSettingsBuilder {
ExtSettingsBuilder::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_ext_settings_builder() {
let settings = ExtSettings::builder()
.log_level("INFO")
.server_info(ServerInfo {
version: "1.0".to_string(),
..ServerInfo::default()
})
.build();
assert_eq!(settings.log_level(), "INFO");
assert_eq!(settings.server_info().version, "1.0");
}
}