use super::{super::error::*, acme::*, key::*};
use {
compris::resolve::*,
kutil::{cli::depict::*, std::immutable::*},
std::path::*,
};
#[derive(Clone, Debug, Default, Depict, Resolve)]
pub struct Host {
#[resolve(single)]
#[depict(style(string))]
pub name: ByteString,
#[resolve(key = "redirect-to")]
#[depict(option, style(number))]
pub redirect_to: Option<u16>,
#[resolve]
#[depict(option, as(depict))]
pub key: Option<Key>,
#[resolve]
#[depict(option, as(depict))]
pub acme: Option<ACME>,
}
impl Host {
pub fn validate<PathT>(&mut self, base_path: PathT) -> Result<(), ConfigurationError>
where
PathT: AsRef<Path>,
{
if self.key.is_some() && self.acme.is_some() {
return Err("host cannot have both `key` and `acme`".into());
}
let base_path = base_path.as_ref();
if let Some(key) = &mut self.key {
key.validate(base_path)?;
}
if let Some(acme) = &mut self.acme {
acme.validate(base_path)?;
}
Ok(())
}
pub fn has_tls(&self) -> bool {
self.key.is_some() || self.acme.is_some()
}
}