use serde::{Deserialize, Serialize};
use super::RouteSslPath;
mod from_route;
mod location;
mod upstream_address;
pub use location::Location;
pub use upstream_address::parse_upstream_address;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Host {
pub name: String,
#[serde(default)]
pub listen: Vec<String>,
#[serde(default)]
pub tls: HostTls,
#[serde(default)]
pub locations: Vec<Location>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct HostTls {
#[serde(default = "enabled_by_default")]
pub enabled: bool,
pub certificate: Option<RouteSslPath>,
#[serde(default)]
pub self_signed_on_failure: bool,
}
impl Default for HostTls {
fn default() -> Self {
Self {
enabled: true,
certificate: None,
self_signed_on_failure: false,
}
}
}
fn enabled_by_default() -> bool {
true
}
#[cfg(test)]
mod tests {
use super::Host;
#[test]
fn test_tls_is_enabled_by_default() {
let host: Host = serde_json::from_value(serde_json::json!({
"name": "a.test",
"tls": { "self_signed_on_failure": true },
}))
.unwrap();
assert!(host.tls.enabled);
let host: Host = serde_json::from_value(serde_json::json!({ "name": "a.test" })).unwrap();
assert!(host.tls.enabled);
assert!(host.listen.is_empty());
}
}