use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct PortsConfig {
#[serde(default = "default_native_port")]
pub native: u16,
#[serde(default = "default_pgwire_port")]
pub pgwire: u16,
#[serde(default = "default_http_port")]
pub http: u16,
#[serde(default)]
pub resp: Option<u16>,
#[serde(default)]
pub ilp: Option<u16>,
}
impl Default for PortsConfig {
fn default() -> Self {
Self {
native: default_native_port(),
pgwire: default_pgwire_port(),
http: default_http_port(),
resp: None,
ilp: None,
}
}
}
fn default_native_port() -> u16 {
6433
}
fn default_pgwire_port() -> u16 {
6432
}
fn default_http_port() -> u16 {
6480
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn defaults_match_documented_values() {
let p = PortsConfig::default();
assert_eq!(p.native, 6433);
assert_eq!(p.pgwire, 6432);
assert_eq!(p.http, 6480);
assert!(p.resp.is_none());
assert!(p.ilp.is_none());
}
#[test]
fn unknown_port_field_rejected() {
let raw = "native = 1234\nhonk = 9999\n";
let result: Result<PortsConfig, _> = toml::from_str(raw);
assert!(result.is_err());
}
}