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 {
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 })
}
}