use serde::{Deserialize, Serialize};
use serde_with::serde_as;
use time::OffsetDateTime;
use crate::Callsign;
#[serde_as]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Association {
pub association_code: String,
pub association_name: String,
pub manager: String,
pub association_manager_callsign: Callsign,
#[serde(with = "time::serde::rfc3339")]
pub active_from: OffsetDateTime,
pub dxcc: String,
pub max_lat: f32,
pub max_long: f32,
pub min_lat: f32,
pub min_long: f32,
pub regions_count: usize,
pub summits_count: usize,
pub regions: Vec<Region>,
pub arm: Vec<ARM>,
}
#[serde_as]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Region {
pub association_code: String,
pub region_code: String,
pub region_manager_callsign: String,
pub region_name: String,
pub manager: String,
pub summits: usize,
pub notes: String,
pub max_lat: f32,
pub max_long: f32,
pub min_lat: f32,
pub min_long: f32,
}
#[serde_as]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ARM {
pub association_code: String,
pub file_name: String,
pub language: String,
pub version_number: f32,
#[serde(with = "time::serde::rfc3339")]
pub last_updated: OffsetDateTime,
}
#[serde_as]
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct RegionResponse {
pub region: Region,
}