ed_journals/modules/logs/content/log_event_content/
module_swap_event.rs1use serde::{Deserialize, Deserializer, Serialize};
4use std::str::FromStr;
5
6use crate::modules::ship::{ShipSlot, ShipType};
7use crate::ship::ShipModule;
8
9#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
11#[serde(rename_all = "PascalCase")]
12pub struct ModuleSwapEvent {
13 #[serde(rename = "MarketID")]
15 pub market_id: u64,
16
17 pub from_slot: ShipSlot,
19
20 pub to_slot: ShipSlot,
22
23 pub from_item: ShipModule,
25
26 #[serde(rename = "FromItem_Localised")]
28 pub from_item_localized: Option<String>,
29
30 #[serde(deserialize_with = "deserialize_to_item")]
33 pub to_item: Option<ShipModule>,
34
35 #[serde(rename = "ToItem_Localised")]
37 pub to_item_localized: Option<String>,
38
39 pub ship: ShipType,
41
42 #[serde(rename = "ShipID")]
44 pub ship_id: u64,
45}
46
47fn deserialize_to_item<'de, D>(deserializer: D) -> Result<Option<ShipModule>, D::Error>
48where
49 D: Deserializer<'de>,
50{
51 let string = String::deserialize(deserializer)?;
52
53 if &string == "Null" {
54 Ok(None)
55 } else {
56 ShipModule::from_str(&string)
57 .map(Some)
58 .map_err(serde::de::Error::custom)
59 }
60}