use anyhow::{Context, Result};
use serde::{Deserialize, Serialize};
use std::fs;
use super::schema::{PortMapping, Role};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ClientConfig {
pub role: Role,
pub server_address: String,
pub server_port: u16,
pub local_interface: String,
pub local_ip: String,
pub server_ip: String,
pub client_id: String,
pub hmac_secret: String,
pub public_key: String,
#[serde(default)]
pub ports: Vec<PortMapping>,
}
impl ClientConfig {
pub fn save(&self) -> Result<()> {
let config_dir = dirs::config_dir()
.context("Failed to determine config directory")?
.join("porta");
fs::create_dir_all(&config_dir)?;
let config_path = config_dir.join("client.toml");
let content = toml::to_string_pretty(self)?;
fs::write(&config_path, content)?;
Ok(())
}
}