use serde::{Deserialize, Serialize};
use serde_with::{serde_as, NoneAsEmptyString};
use time::OffsetDateTime;
use crate::{Callsign, HasSummit};
#[serde_as]
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct Summit {
pub name: String,
pub association_code: String,
pub association_name: String,
pub summit_code: String,
pub region_code: String,
pub region_name: String,
pub alt_m: u16,
pub alt_ft: u16,
pub grid_ref_1: String,
pub longitude: f32,
pub grid_ref_2: String,
pub latitude: f32,
pub locator: String,
#[serde_as(as = "NoneAsEmptyString")]
pub notes: Option<String>,
#[serde(with = "time::serde::rfc3339")]
pub valid_from: OffsetDateTime,
#[serde(with = "time::serde::rfc3339")]
pub valid_to: OffsetDateTime,
pub activation_count: Option<u32>,
pub my_activations: Option<u32>,
pub my_chases: Option<u32>,
#[serde(with = "time::serde::rfc3339::option")]
pub activation_date: Option<OffsetDateTime>,
pub activation_call: Option<Callsign>,
pub points: u8,
pub valid: bool,
pub restriction_list: Option<Vec<SummitRestriction>>,
pub restriction_mask: bool,
}
#[allow(missing_docs)] #[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct SummitRestriction {
pub code: u16,
#[serde(rename = "type")]
pub ty: String,
}
impl HasSummit for Summit {
fn summit_code(&self) -> String {
self.summit_code.clone()
}
}