edjr 0.1.2

Elite Dangerous Journal Reader
use {crate::elite::ship::Ship, serde::Deserialize};

#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct SetUserShipNameEvent {
    #[serde(flatten)]
    pub ship: Ship,
    pub user_ship_id: String,
    pub user_ship_name: String,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct Cargo {
    #[serde(alias = "Name", alias = "Type")]
    pub name: String,
    #[serde(alias = "Name_Localised", alias = "Type_Localised")]
    pub name_display: Option<String>,
    pub count: Option<u64>,
    #[serde(alias = "OwnerID")]
    pub owner_id: u64,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct ShipLockerEvent {
    pub components: Option<Vec<Cargo>>,
    pub consumables: Option<Vec<Cargo>>,
    pub data: Option<Vec<Cargo>>,
    pub items: Option<Vec<Cargo>>,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StoredShip {
    #[serde(flatten)]
    pub ship: Ship,
    pub value: u64,
    #[serde(default)]
    pub hot: bool,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct RemoteShip {
    #[serde(flatten)]
    pub ship: Ship,
    pub value: u64,
    pub transfer_cost: Option<u64>,
    pub transfer_time: Option<f64>,
    pub star_system: Option<String>,
    #[serde(alias = "ShipMarketID")]
    pub market_id: Option<u64>,
    #[serde(default)]
    pub in_transit: bool,
    #[serde(default)]
    pub hot: bool,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StoredShipsEvent {
    #[serde(alias = "MarketID")]
    pub market_id: u64,
    pub ships_here: Vec<StoredShip>,
    pub ships_remote: Vec<RemoteShip>,
    pub star_system: String,
    pub station_name: String,
}