use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
#[schema(example = json!({
"genome_id": "human_cortex_v1",
"title": "Human Cortex Model v1",
"version": "1.0.0",
"cortical_area_count": 52,
"brain_region_count": 12,
"created_at": "2025-01-15T10:30:00Z",
"modified_at": "2025-01-20T14:45:00Z"
}))]
pub struct GenomeInfoResponse {
pub genome_id: Option<String>,
pub title: Option<String>,
pub version: Option<String>,
pub cortical_area_count: usize,
pub brain_region_count: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub modified_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct LoadGenomeRequest {
pub genome_json: String,
#[serde(default)]
pub reset_before_load: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct SaveGenomeRequest {
#[serde(default)]
pub genome_id: Option<String>,
#[serde(default)]
pub title: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct SaveGenomeResponse {
pub genome_json: String,
pub genome_info: GenomeInfoResponse,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct ValidateGenomeRequest {
pub genome_json: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct ValidateGenomeResponse {
pub is_valid: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub errors: Option<Vec<String>>,
}