use anyhow::Context;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use crate::server::state::ControlPlaneIoConfig;
#[derive(Debug, Serialize, Deserialize, ToSchema, Clone)]
pub struct IoControlPlaneConfigDto {
pub api_addr: Option<String>,
}
impl TryFrom<IoControlPlaneConfigDto> for ControlPlaneIoConfig {
type Error = anyhow::Error;
fn try_from(value: IoControlPlaneConfigDto) -> Result<Self, Self::Error> {
let api_addr = match value.api_addr {
Some(addr) => Some(addr.parse().context("invalid control plane API address")?),
None => None,
};
Ok(Self { api_addr })
}
}
impl From<&ControlPlaneIoConfig> for IoControlPlaneConfigDto {
fn from(value: &ControlPlaneIoConfig) -> Self {
IoControlPlaneConfigDto {
api_addr: value.api_addr.map(|addr| addr.to_string()),
}
}
}