use std::net::SocketAddr;
use serde::{Deserialize, Serialize};
#[derive(Debug, PartialEq, Clone, Default, Serialize, Deserialize)]
pub struct TunnelGatewayIoConfig {
pub listen_addr: Option<SocketAddr>,
}
impl TunnelGatewayIoConfig {
pub fn new(listen_addr: SocketAddr) -> Self {
Self {
listen_addr: Some(listen_addr),
}
}
}
pub mod dto {
use anyhow::Context;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use crate::tunnel_gateway::state::TunnelGatewayIoConfig;
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct IoDataPlaneConfigDto {
#[schema(nullable = false)]
#[serde(skip_serializing_if = "Option::is_none", default)]
pub addr: Option<String>,
}
impl From<&TunnelGatewayIoConfig> for IoDataPlaneConfigDto {
fn from(value: &TunnelGatewayIoConfig) -> Self {
IoDataPlaneConfigDto {
addr: value.listen_addr.map(|addr| addr.to_string()),
}
}
}
impl TryFrom<IoDataPlaneConfigDto> for TunnelGatewayIoConfig {
type Error = anyhow::Error;
fn try_from(value: IoDataPlaneConfigDto) -> Result<Self, Self::Error> {
let listen_addr = match value.addr {
Some(addr) => Some(addr.parse().context("invalid listen address")?),
None => None,
};
Ok(Self { listen_addr })
}
}
}