use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OutputConfig {
pub dir: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub model: Option<ModelOutputConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metrics: Option<MetricsOutputConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub report: Option<ReportConfig>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub registry: Option<RegistryConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelOutputConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub save_optimizer: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub save_scheduler: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetricsOutputConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReportConfig {
pub enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_plots: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegistryConfig {
pub enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_config: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub include_metrics: Option<bool>,
}