use std::net::SocketAddr;
use crate::error::{QrpcError, QrpcResult};
#[derive(Clone, Debug)]
pub struct PeerConfig {
pub address: String,
pub port: u16,
pub server_name: String,
pub ca_cert_path: Option<String>,
pub expected_id: Option<String>,
}
impl PeerConfig {
pub fn socket_addr(&self) -> QrpcResult<SocketAddr> {
format!("{}:{}", self.address, self.port)
.parse::<SocketAddr>()
.map_err(|e| QrpcError::MessageDecode(format!("invalid socket addr: {e}")))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parse_socket_addr_ok() {
let cfg = PeerConfig {
address: "127.0.0.1".to_string(),
port: 5000,
server_name: "localhost".to_string(),
ca_cert_path: None,
expected_id: None,
};
let addr = cfg.socket_addr().expect("must parse");
assert_eq!(addr.to_string(), "127.0.0.1:5000");
}
#[test]
fn parse_socket_addr_fail() {
let cfg = PeerConfig {
address: "not-an-ip".to_string(),
port: 5000,
server_name: "localhost".to_string(),
ca_cert_path: None,
expected_id: None,
};
assert!(cfg.socket_addr().is_err());
}
}