diff --git a/ed-journals/src/lib.rs b/ed-journals/src/lib.rs index 964ddf95..d6f7f4d3 100644 --- a/ed-journals/src/lib.rs +++ b/ed-journals/src/lib.rs @@ -11,30 +11,30 @@ //! and `Status.json` etc will be added in the future. Best place to get started is the [JournalDir] //! model. -mod models; mod macros; +mod models; pub use models::journal_dir::JournalDir; -pub use models::journal_file::JournalFile; pub use models::journal_event::JournalEvent; -pub use models::journal_reader::JournalReader; pub use models::journal_event_content::JournalEventContent; pub use models::journal_event_content::JournalEventContentKind; +pub use models::journal_file::JournalFile; +pub use models::journal_reader::JournalReader; pub use models::journal_event_content; #[cfg(test)] mod tests { - use std::collections::HashSet; + use crate::models::journal_dir::JournalDir; - use std::env::current_dir; - use crate::models::journal_event_content::JournalEventContent; use crate::models::journal_event_content::scan_event::ScanEventKind; - use crate::models::journal_event_content::shared::galaxy::atmosphere_type::AtmosphereType; + use crate::models::journal_event_content::JournalEventContent; + use std::env::current_dir; #[test] fn sandbox() { - let dir_path = current_dir().unwrap() + let dir_path = current_dir() + .unwrap() .parent() .unwrap() .join("test-journals"); @@ -67,8 +67,8 @@ mod tests { } ScanEventKind::BeltCluster(_) => {} } - }, - _ => {}, + } + _ => {} } } } diff --git a/ed-journals/src/models.rs b/ed-journals/src/models.rs index 3b05e927..0c1fc916 100644 --- a/ed-journals/src/models.rs +++ b/ed-journals/src/models.rs @@ -1,5 +1,3 @@ -use crate::JournalFile; - pub mod journal_dir; pub mod journal_event; diff --git a/ed-journals/src/models/journal_dir.rs b/ed-journals/src/models/journal_dir.rs index bc2f2c2f..1c2df2ca 100644 --- a/ed-journals/src/models/journal_dir.rs +++ b/ed-journals/src/models/journal_dir.rs @@ -72,21 +72,20 @@ impl JournalDir { #[cfg(test)] mod tests { - use std::env::current_dir; use crate::JournalDir; + use std::env::current_dir; #[test] fn journal_files_oldest_first_are_returned_in_the_correct_order() { - let dir_path = current_dir().unwrap() + let dir_path = current_dir() + .unwrap() .parent() .unwrap() .join("test-journals"); let journal_dir = JournalDir::try_from(dir_path).unwrap(); - let mut journal_files = journal_dir.journal_logs_oldest_first() - .unwrap() - .into_iter(); + let mut journal_files = journal_dir.journal_logs_oldest_first().unwrap().into_iter(); let journal_1 = journal_files.next().unwrap(); let journal_2 = journal_files.next().unwrap(); @@ -99,16 +98,15 @@ mod tests { #[test] fn journal_files_newest_first_are_returned_in_the_correct_order() { - let dir_path = current_dir().unwrap() + let dir_path = current_dir() + .unwrap() .parent() .unwrap() .join("test-journals"); let journal_dir = JournalDir::try_from(dir_path).unwrap(); - let mut journal_files = journal_dir.journal_logs_newest_first() - .unwrap() - .into_iter(); + let mut journal_files = journal_dir.journal_logs_newest_first().unwrap().into_iter(); let journal_1 = journal_files.next().unwrap(); let journal_2 = journal_files.next().unwrap(); diff --git a/ed-journals/src/models/journal_event.rs b/ed-journals/src/models/journal_event.rs index 79b399e4..fed2e445 100644 --- a/ed-journals/src/models/journal_event.rs +++ b/ed-journals/src/models/journal_event.rs @@ -1,7 +1,6 @@ use crate::models::journal_event_content::JournalEventContent; use chrono::{DateTime, Utc}; use serde::Deserialize; -use crate::models::journal_file::JournalFile; /// An entry from a [JournalFile]. Most of the content can be found in the [JournalEventContent]. #[derive(Debug, Deserialize, Clone, PartialEq)] diff --git a/ed-journals/src/models/journal_event_content.rs b/ed-journals/src/models/journal_event_content.rs index 75199cdc..22846e9b 100644 --- a/ed-journals/src/models/journal_event_content.rs +++ b/ed-journals/src/models/journal_event_content.rs @@ -128,6 +128,20 @@ pub mod sell_organic_data; pub mod send_text_event; pub mod set_user_ship_name_event; +mod book_taxi_event; +mod carrier_buy_event; +mod carrier_crew_services_event; +mod carrier_finance_event; +mod crew_hire_event; +mod engineer_contribution_event; +mod faction_kill_bond_event; +mod fs_embark_event; +mod interdiction_event; +mod module_buy_and_store_event; +mod module_sell_remote_event; +mod powerplay_leave_event; +mod powerplay_salary_event; +mod search_and_rescue_event; /// Contains structs and enums which are shared across events. Things like commodity and material /// names, ship types, exobiology data etc. can be found here. pub mod shared; @@ -140,6 +154,7 @@ pub mod shipyard_new_event; pub mod shipyard_swap_event; pub mod shipyard_transfer_event; pub mod squadron_startup_event; +mod srv_destroyed_event; pub mod start_jump_event; pub mod statistics_event; pub mod stored_modules_event; @@ -157,26 +172,10 @@ pub mod undocked_event; pub mod use_consumable_event; pub mod uss_drop_event; pub mod vehicle_switch_event; -mod faction_kill_bond_event; -mod book_taxi_event; -mod interdiction_event; -mod module_buy_and_store_event; -mod carrier_crew_services_event; -mod engineer_contribution_event; -mod srv_destroyed_event; -mod module_sell_remote_event; -mod powerplay_leave_event; -mod wing_invite_event; mod wing_add_event; +mod wing_invite_event; mod wing_join_event; -mod powerplay_salary_event; -mod carrier_buy_event; -mod fs_embark_event; -mod carrier_finance_event; -mod search_and_rescue_event; -mod crew_hire_event; -use kinded::Kinded; use crate::models::journal_event_content::afmu_repairs_event::AFMURepairsEvent; use crate::models::journal_event_content::applied_to_squadron_event::AppliedToSquadronEvent; use crate::models::journal_event_content::approach_body_event::ApproachBodyEvent; @@ -184,6 +183,7 @@ use crate::models::journal_event_content::approach_settlement_event::ApproachSet use crate::models::journal_event_content::asteroid_cracked_event::AsteroidCrackedEvent; use crate::models::journal_event_content::backpack_change_event::BackpackChangeEvent; use crate::models::journal_event_content::backpack_event::BackpackEvent; +use crate::models::journal_event_content::book_taxi_event::BookTaxiEvent; use crate::models::journal_event_content::bounty_event::BountyEvent; use crate::models::journal_event_content::buy_ammo_event::BuyAmmoEvent; use crate::models::journal_event_content::buy_drones_event::BuyDronesEvent; @@ -195,7 +195,10 @@ use crate::models::journal_event_content::cargo_depot_event::CargoDepotEvent; use crate::models::journal_event_content::cargo_event::CargoEvent; use crate::models::journal_event_content::cargo_transfer_event::CargoTransferEvent; use crate::models::journal_event_content::carrier_bank_transfer_event::CarrierBankTransferEvent; +use crate::models::journal_event_content::carrier_buy_event::CarrierBuyEvent; +use crate::models::journal_event_content::carrier_crew_services_event::CarrierCrewServicesEvent; use crate::models::journal_event_content::carrier_deposit_fuel_event::CarrierDepositFuelEvent; +use crate::models::journal_event_content::carrier_finance_event::CarrierFinanceEvent; use crate::models::journal_event_content::carrier_jump_cancelled_event::CarrierJumpCancelled; use crate::models::journal_event_content::carrier_jump_event::CarrierJumpEvent; use crate::models::journal_event_content::carrier_jump_request_event::CarrierJumpRequestEvent; @@ -208,6 +211,7 @@ use crate::models::journal_event_content::commander_event::CommanderEvent; use crate::models::journal_event_content::commit_crime_event::CommitCrimeEvent; use crate::models::journal_event_content::create_suit_loadout_event::CreateSuitLoadoutEvent; use crate::models::journal_event_content::crew_assign_event::CrewAssignEvent; +use crate::models::journal_event_content::crew_hire_event::CrewHireEvent; use crate::models::journal_event_content::crime_victim_event::CrimeVictimEvent; use crate::models::journal_event_content::data_scanned_event::DataScannedEvent; use crate::models::journal_event_content::datalink_scan_event::DatalinkScanEvent; @@ -225,14 +229,17 @@ use crate::models::journal_event_content::docking_timeout_event::DockingTimeoutE use crate::models::journal_event_content::drop_items_event::DropItemsEvent; use crate::models::journal_event_content::eject_cargo_event::EjectCargoEvent; use crate::models::journal_event_content::embark_event::EmbarkEvent; +use crate::models::journal_event_content::engineer_contribution_event::EngineerContributionEvent; use crate::models::journal_event_content::engineer_craft_event::EngineerCraftEvent; use crate::models::journal_event_content::engineer_progress_event::EngineerProgressEvent; use crate::models::journal_event_content::escape_interdiction_event::EscapeInterdictionEvent; +use crate::models::journal_event_content::faction_kill_bond_event::FactionKillBondEvent; use crate::models::journal_event_content::fetch_remote_module_event::FetchRemoteModuleEvent; use crate::models::journal_event_content::fighter_destroyed_event::FighterDestroyedEvent; use crate::models::journal_event_content::fighter_rebuilt_event::FighterRebuiltEvent; use crate::models::journal_event_content::file_header_event::FileHeaderEvent; use crate::models::journal_event_content::friends_event::FriendsEvent; +use crate::models::journal_event_content::fs_embark_event::FCMaterialsEvent; use crate::models::journal_event_content::fsd_jump_event::FSDJumpEvent; use crate::models::journal_event_content::fsd_target_event::FSDTargetEvent; use crate::models::journal_event_content::fss_all_bodies_found_event::FSSAllBodiesFoundEvent; @@ -242,6 +249,7 @@ use crate::models::journal_event_content::fss_signal_discovered_event::FSSSignal use crate::models::journal_event_content::fuel_scoop_event::FuelScoopEvent; use crate::models::journal_event_content::hull_damage_event::HullDamageEvent; use crate::models::journal_event_content::interdicted_event::InterdictedEvent; +use crate::models::journal_event_content::interdiction_event::InterdictionEvent; use crate::models::journal_event_content::jet_cone_boost_event::JetConeBoostEvent; use crate::models::journal_event_content::launch_drone_event::LaunchDroneEvent; use crate::models::journal_event_content::launch_fighter_event::LaunchFighterEvent; @@ -266,9 +274,11 @@ use crate::models::journal_event_content::mission_completed_event::MissionComple use crate::models::journal_event_content::mission_failed_event::MissionFailedEvent; use crate::models::journal_event_content::mission_redirected_event::MissionRedirectedEvent; use crate::models::journal_event_content::missions_event::MissionsEvent; +use crate::models::journal_event_content::module_buy_and_store_event::ModuleBuyAndStoreEvent; use crate::models::journal_event_content::module_buy_event::ModuleBuyEvent; use crate::models::journal_event_content::module_retrieve_event::ModuleRetrieveEvent; use crate::models::journal_event_content::module_sell_event::ModuleSellEvent; +use crate::models::journal_event_content::module_sell_remote_event::ModuleSellRemoteEvent; use crate::models::journal_event_content::module_store_event::ModuleStoreEvent; use crate::models::journal_event_content::module_swap_event::ModuleSwapEvent; use crate::models::journal_event_content::multi_sell_exploration_data_event::MultiSellExplorationDataEvent; @@ -282,6 +292,8 @@ use crate::models::journal_event_content::passengers_event::PassengersEvent; use crate::models::journal_event_content::pay_bounties_event::PayBountiesEvent; use crate::models::journal_event_content::pay_fines_event::PayFinesEvent; use crate::models::journal_event_content::powerplay_event::PowerplayEvent; +use crate::models::journal_event_content::powerplay_leave_event::PowerplayLeaveEvent; +use crate::models::journal_event_content::powerplay_salary_event::PowerplaySalaryEvent; use crate::models::journal_event_content::progress_event::ProgressEvent; use crate::models::journal_event_content::promotion_event::PromotionEvent; use crate::models::journal_event_content::prospected_asteroid_event::ProspectedAsteroidEvent; @@ -302,6 +314,7 @@ use crate::models::journal_event_content::scan_bary_centre_event::ScanBaryCentre use crate::models::journal_event_content::scan_event::ScanEvent; use crate::models::journal_event_content::scan_organic_event::ScanOrganicEvent; use crate::models::journal_event_content::scanned_event::ScannedEvent; +use crate::models::journal_event_content::search_and_rescue_event::SearchAndRescueEvent; use crate::models::journal_event_content::sell_drones_event::SellDronesEvent; use crate::models::journal_event_content::sell_organic_data::SellOrganicDataEvent; use crate::models::journal_event_content::send_text_event::SendTextEvent; @@ -315,6 +328,7 @@ use crate::models::journal_event_content::shipyard_new_event::ShipyardNewEvent; use crate::models::journal_event_content::shipyard_swap_event::ShipyardSwapEvent; use crate::models::journal_event_content::shipyard_transfer_event::ShipyardTransferEvent; use crate::models::journal_event_content::squadron_startup_event::SquadronStartupEvent; +use crate::models::journal_event_content::srv_destroyed_event::SRVDestroyedEvent; use crate::models::journal_event_content::start_jump_event::StartJumpEvent; use crate::models::journal_event_content::statistics_event::StatisticsEvent; use crate::models::journal_event_content::stored_modules_event::StoredModulesEvent; @@ -332,28 +346,12 @@ use crate::models::journal_event_content::undocked_event::UndockedEvent; use crate::models::journal_event_content::use_consumable_event::UseConsumableEvent; use crate::models::journal_event_content::uss_drop_event::USSDropEvent; use crate::models::journal_event_content::vehicle_switch_event::VehicleSwitchEvent; -use serde::Deserialize; -use serde_json::Value; -use crate::models::journal_event_content::book_taxi_event::BookTaxiEvent; -use crate::models::journal_event_content::carrier_buy_event::CarrierBuyEvent; -use crate::models::journal_event_content::carrier_crew_services_event::CarrierCrewServicesEvent; -use crate::models::journal_event_content::carrier_finance_event::CarrierFinanceEvent; -use crate::models::journal_event_content::crew_hire_event::CrewHireEvent; -use crate::models::journal_event_content::engineer_contribution_event::EngineerContributionEvent; -use crate::models::journal_event_content::faction_kill_bond_event::FactionKillBondEvent; -use crate::models::journal_event_content::fs_embark_event::FCMaterialsEvent; -use crate::models::journal_event_content::interdiction_event::InterdictionEvent; -use crate::models::journal_event_content::module_buy_and_store_event::ModuleBuyAndStoreEvent; -use crate::models::journal_event_content::module_sell_remote_event::ModuleSellRemoteEvent; -use crate::models::journal_event_content::powerplay_leave_event::PowerplayLeaveEvent; -use crate::models::journal_event_content::powerplay_salary_event::PowerplaySalaryEvent; -use crate::models::journal_event_content::search_and_rescue_event::SearchAndRescueEvent; -use crate::models::journal_event_content::srv_destroyed_event::SRVDestroyedEvent; use crate::models::journal_event_content::wing_add_event::WingAddEvent; use crate::models::journal_event_content::wing_invite_event::WingInviteEvent; use crate::models::journal_event_content::wing_join_event::WingJoinEvent; - -use crate::models::journal_file::JournalFile; +use kinded::Kinded; +use serde::Deserialize; +use serde_json::Value; /// Enum containing all the possible events that can be found in a [JournalFile]. /// diff --git a/ed-journals/src/models/journal_event_content/codex_entry_event.rs b/ed-journals/src/models/journal_event_content/codex_entry_event.rs index 9caa9b00..587117a1 100644 --- a/ed-journals/src/models/journal_event_content/codex_entry_event.rs +++ b/ed-journals/src/models/journal_event_content/codex_entry_event.rs @@ -1,6 +1,6 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::exploration::codex_entry::CodexEntry; use crate::models::journal_event_content::shared::galaxy::region::Region; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/create_suit_loadout_event.rs b/ed-journals/src/models/journal_event_content/create_suit_loadout_event.rs index 741109e0..514096f2 100644 --- a/ed-journals/src/models/journal_event_content/create_suit_loadout_event.rs +++ b/ed-journals/src/models/journal_event_content/create_suit_loadout_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::odyssey::suit::Suit; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/crew_hire_event.rs b/ed-journals/src/models/journal_event_content/crew_hire_event.rs index 097ae8fe..717608e7 100644 --- a/ed-journals/src/models/journal_event_content/crew_hire_event.rs +++ b/ed-journals/src/models/journal_event_content/crew_hire_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::commander::combat_rank::CombatRank; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/dock_srv_event.rs b/ed-journals/src/models/journal_event_content/dock_srv_event.rs index 0bd8b6ab..d7ef83c9 100644 --- a/ed-journals/src/models/journal_event_content/dock_srv_event.rs +++ b/ed-journals/src/models/journal_event_content/dock_srv_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::ship::srv_type::SRVType; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/engineer_contribution_event.rs b/ed-journals/src/models/journal_event_content/engineer_contribution_event.rs index 28682ab3..d509e61a 100644 --- a/ed-journals/src/models/journal_event_content/engineer_contribution_event.rs +++ b/ed-journals/src/models/journal_event_content/engineer_contribution_event.rs @@ -1,6 +1,6 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::materials::material::Material; use crate::models::journal_event_content::shared::trading::commodity::Commodity; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/interdiction_event.rs b/ed-journals/src/models/journal_event_content/interdiction_event.rs index 51491141..28a77b6c 100644 --- a/ed-journals/src/models/journal_event_content/interdiction_event.rs +++ b/ed-journals/src/models/journal_event_content/interdiction_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::commander::combat_rank::CombatRank; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/launch_srv_event.rs b/ed-journals/src/models/journal_event_content/launch_srv_event.rs index 1cd1c328..72b7b638 100644 --- a/ed-journals/src/models/journal_event_content/launch_srv_event.rs +++ b/ed-journals/src/models/journal_event_content/launch_srv_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::ship::srv_type::SRVType; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/module_buy_and_store_event.rs b/ed-journals/src/models/journal_event_content/module_buy_and_store_event.rs index 29ae67fd..4c2be520 100644 --- a/ed-journals/src/models/journal_event_content/module_buy_and_store_event.rs +++ b/ed-journals/src/models/journal_event_content/module_buy_and_store_event.rs @@ -1,6 +1,6 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::ship::ship_module::ShipModule; use crate::models::journal_event_content::shared::ship::ship_type::ShipType; +use serde::Deserialize; /// When buying a module but storing at the current location instead of equipping it to the current /// ship. diff --git a/ed-journals/src/models/journal_event_content/module_retrieve_event.rs b/ed-journals/src/models/journal_event_content/module_retrieve_event.rs index 612f4f2d..384a7a6f 100644 --- a/ed-journals/src/models/journal_event_content/module_retrieve_event.rs +++ b/ed-journals/src/models/journal_event_content/module_retrieve_event.rs @@ -1,7 +1,7 @@ -use crate::models::journal_event_content::shared::ship::ship_type::ShipType; -use serde::Deserialize; use crate::models::journal_event_content::shared::ship::ship_module::ShipModule; use crate::models::journal_event_content::shared::ship::ship_slot::ShipSlot; +use crate::models::journal_event_content::shared::ship::ship_type::ShipType; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/module_sell_remote_event.rs b/ed-journals/src/models/journal_event_content/module_sell_remote_event.rs index 6d27414d..c7a5534e 100644 --- a/ed-journals/src/models/journal_event_content/module_sell_remote_event.rs +++ b/ed-journals/src/models/journal_event_content/module_sell_remote_event.rs @@ -1,6 +1,6 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::ship::ship_module::ShipModule; use crate::models::journal_event_content::shared::ship::ship_type::ShipType; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/module_store_event.rs b/ed-journals/src/models/journal_event_content/module_store_event.rs index e4ab7c6d..cd9f657b 100644 --- a/ed-journals/src/models/journal_event_content/module_store_event.rs +++ b/ed-journals/src/models/journal_event_content/module_store_event.rs @@ -1,7 +1,7 @@ use crate::models::journal_event_content::shared::ship::ship_module::ShipModule; +use crate::models::journal_event_content::shared::ship::ship_slot::ShipSlot; use crate::models::journal_event_content::shared::ship::ship_type::ShipType; use serde::Deserialize; -use crate::models::journal_event_content::shared::ship::ship_slot::ShipSlot; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/scan_event.rs b/ed-journals/src/models/journal_event_content/scan_event.rs index 2e68f4a3..7b70b64d 100644 --- a/ed-journals/src/models/journal_event_content/scan_event.rs +++ b/ed-journals/src/models/journal_event_content/scan_event.rs @@ -1,5 +1,3 @@ -use serde::{Deserialize, Deserializer}; -use serde_json::Value; use crate::models::journal_event_content::shared::galaxy::atmosphere::Atmosphere; use crate::models::journal_event_content::shared::galaxy::atmosphere_element::AtmosphereElement; use crate::models::journal_event_content::shared::galaxy::atmosphere_type::AtmosphereType; @@ -11,6 +9,8 @@ use crate::models::journal_event_content::shared::galaxy::star_luminosity::StarL use crate::models::journal_event_content::shared::galaxy::terraform_state::TerraformState; use crate::models::journal_event_content::shared::galaxy::volcanism::Volcanism; use crate::models::journal_event_content::shared::materials::material::Material; +use serde::{Deserialize, Deserializer}; +use serde_json::Value; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] @@ -53,7 +53,10 @@ pub enum ScanEventKind { } impl<'de> Deserialize<'de> for ScanEventKind { - fn deserialize(deserializer: D) -> Result where D: Deserializer<'de> { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { let value = Value::deserialize(deserializer)?; let Value::Object(map) = &value else { @@ -65,7 +68,7 @@ impl<'de> Deserialize<'de> for ScanEventKind { if map.get("StarType").is_some() { return Ok(ScanEventKind::Star( serde_json::from_value(value) - .map_err(|e| serde::de::Error::custom(format!("{}", e)))? + .map_err(|e| serde::de::Error::custom(format!("{}", e)))?, )); } @@ -74,14 +77,14 @@ impl<'de> Deserialize<'de> for ScanEventKind { if map.get("TidalLock").is_some() { return Ok(ScanEventKind::Planet( serde_json::from_value(value) - .map_err(|e| serde::de::Error::custom(format!("{}", e)))? + .map_err(|e| serde::de::Error::custom(format!("{}", e)))?, )); } // It none of the above match only then should it be considered a belt cluster. Ok(ScanEventKind::BeltCluster( serde_json::from_value(value) - .map_err(|e| serde::de::Error::custom(format!("{}", e)))? + .map_err(|e| serde::de::Error::custom(format!("{}", e)))?, )) } } diff --git a/ed-journals/src/models/journal_event_content/search_and_rescue_event.rs b/ed-journals/src/models/journal_event_content/search_and_rescue_event.rs index 507489a4..0feac092 100644 --- a/ed-journals/src/models/journal_event_content/search_and_rescue_event.rs +++ b/ed-journals/src/models/journal_event_content/search_and_rescue_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::trading::commodity::Commodity; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/shared/exploration.rs b/ed-journals/src/models/journal_event_content/shared/exploration.rs index f3f89fdc..1a182a7b 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration.rs @@ -1,8 +1,8 @@ +pub mod codex_entry; pub mod genus; pub mod planetary_signal_type; pub mod species; +pub mod star_class_codex_entry; pub mod variant; pub mod variant_color; pub mod variant_source; -pub mod codex_entry; -pub mod star_class_codex_entry; diff --git a/ed-journals/src/models/journal_event_content/shared/exploration/codex_entry.rs b/ed-journals/src/models/journal_event_content/shared/exploration/codex_entry.rs index 7fb6d84c..712b7aa6 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration/codex_entry.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration/codex_entry.rs @@ -1,8 +1,8 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::exploration::genus::Genus; use crate::models::journal_event_content::shared::exploration::species::Species; use crate::models::journal_event_content::shared::exploration::star_class_codex_entry::StarClassCodexEntry; use crate::models::journal_event_content::shared::exploration::variant::Variant; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum CodexEntry { diff --git a/ed-journals/src/models/journal_event_content/shared/exploration/genus.rs b/ed-journals/src/models/journal_event_content/shared/exploration/genus.rs index 1c7e921c..4c4f7a21 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration/genus.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration/genus.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::exploration::species::Species; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum Genus { @@ -124,17 +124,16 @@ impl From<&Species> for Genus { | Species::CactoidaCortexum | Species::CactoidaVermis => Genus::Cactoida, - Species::ClypeusSpeculumi - | Species::ClypeusLacrimam - | Species::ClypeusMargaritus => Genus::Clypeus, + Species::ClypeusSpeculumi | Species::ClypeusLacrimam | Species::ClypeusMargaritus => { + Genus::Clypeus + } Species::ConchaRenibus | Species::ConchaAureolas | Species::ConchaLabiata | Species::ConchaBiconcavis => Genus::Concha, - Species::ElectricaePluma - | Species::ElectricaeRadialem => Genus::Electricae, + Species::ElectricaePluma | Species::ElectricaeRadialem => Genus::Electricae, Species::FonticuluaCampestris | Species::FonticuluaSegmentatus @@ -168,9 +167,9 @@ impl From<&Species> for Genus { | Species::OsseusPellebantus | Species::OsseusDiscus => Genus::Osseus, - Species::ReceptaUmbrux - | Species::ReceptaDeltahedronix - | Species::ReceptaConditivus => Genus::Recepta, + Species::ReceptaUmbrux | Species::ReceptaDeltahedronix | Species::ReceptaConditivus => { + Genus::Recepta + } Species::SinuousTubersAlbidum | Species::SinuousTubersBlatteum diff --git a/ed-journals/src/models/journal_event_content/shared/exploration/planetary_signal_type.rs b/ed-journals/src/models/journal_event_content/shared/exploration/planetary_signal_type.rs index 89e8a6ee..98a76725 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration/planetary_signal_type.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration/planetary_signal_type.rs @@ -21,7 +21,7 @@ pub enum PlanetarySignalType { #[serde(rename = "$SAA_SignalType_Other;")] Other, -#[serde(untagged)] + #[serde(untagged)] Commodity(Commodity), #[cfg(not(feature = "strict"))] diff --git a/ed-journals/src/models/journal_event_content/shared/exploration/species.rs b/ed-journals/src/models/journal_event_content/shared/exploration/species.rs index cac3c066..ac4a4ad5 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration/species.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration/species.rs @@ -1,6 +1,6 @@ -use std::str::FromStr; use serde::Deserialize; use serde_json::Value; +use std::str::FromStr; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum Species { diff --git a/ed-journals/src/models/journal_event_content/shared/exploration/star_class_codex_entry.rs b/ed-journals/src/models/journal_event_content/shared/exploration/star_class_codex_entry.rs index c67a41af..f9a0c03b 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration/star_class_codex_entry.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration/star_class_codex_entry.rs @@ -1,9 +1,9 @@ -use std::str::FromStr; +use crate::from_str_deserialize_impl; +use crate::models::journal_event_content::shared::galaxy::star_class::{StarClass, StarClassError}; use once_cell::sync::Lazy; use regex::Regex; +use std::str::FromStr; use thiserror::Error; -use crate::from_str_deserialize_impl; -use crate::models::journal_event_content::shared::galaxy::star_class::{StarClass, StarClassError}; #[derive(Debug, Clone, PartialEq)] pub struct StarClassCodexEntry(pub StarClass); @@ -17,7 +17,8 @@ pub enum StarClassCodexEntryError { FailedToParseStarClass(#[from] StarClassError), } -const STAR_CLASS_CODEX_ENTRY_REGEX: Lazy = Lazy::new(|| Regex::new(r#"^\$Codex_Ent_(\w+)_Type_Name;$"#).unwrap()); +const STAR_CLASS_CODEX_ENTRY_REGEX: Lazy = + Lazy::new(|| Regex::new(r#"^\$Codex_Ent_(\w+)_Type_Name;$"#).unwrap()); impl FromStr for StarClassCodexEntry { type Err = StarClassCodexEntryError; @@ -27,11 +28,13 @@ impl FromStr for StarClassCodexEntry { return Err(StarClassCodexEntryError::FailedToParse(s.to_string())); }; - Ok(StarClassCodexEntry(captures - .get(1) - .expect("Should have been captured already") - .as_str() - .parse()?)) + Ok(StarClassCodexEntry( + captures + .get(1) + .expect("Should have been captured already") + .as_str() + .parse()?, + )) } } diff --git a/ed-journals/src/models/journal_event_content/shared/exploration/variant.rs b/ed-journals/src/models/journal_event_content/shared/exploration/variant.rs index 8f86d601..a6f725b7 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration/variant.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration/variant.rs @@ -1,12 +1,16 @@ -use std::str::FromStr; +use crate::from_str_deserialize_impl; +use crate::models::journal_event_content::shared::exploration::species::Species; +use crate::models::journal_event_content::shared::exploration::variant_color::{ + VariantColor, VariantColorError, +}; +use crate::models::journal_event_content::shared::exploration::variant_source::{ + VariantSource, VariantSourceError, +}; use once_cell::sync::Lazy; use regex::Regex; use serde::Deserialize; +use std::str::FromStr; use thiserror::Error; -use crate::from_str_deserialize_impl; -use crate::models::journal_event_content::shared::exploration::species::Species; -use crate::models::journal_event_content::shared::exploration::variant_color::{VariantColor, VariantColorError}; -use crate::models::journal_event_content::shared::exploration::variant_source::{VariantSource, VariantSourceError}; #[derive(Debug, Clone, PartialEq)] pub struct Variant { @@ -29,7 +33,8 @@ pub enum VariantError { FailedToParse(String), } -const VARIANT_REGEX: Lazy = Lazy::new(|| Regex::new(r#"^(\$Codex_Ent_([a-zA-Z]+)_(\d+))_([a-zA-Z]+)(_Name;)?$"#).unwrap()); +const VARIANT_REGEX: Lazy = + Lazy::new(|| Regex::new(r#"^(\$Codex_Ent_([a-zA-Z]+)_(\d+))_([a-zA-Z]+)(_Name;)?$"#).unwrap()); impl FromStr for Variant { type Err = VariantError; @@ -39,25 +44,24 @@ impl FromStr for Variant { return Err(VariantError::FailedToParse(s.to_string())); }; - let species = captures.get(1) + let species = captures + .get(1) .expect("Should have been captured already") .as_str(); let species = format!("{}_Name;", species) .parse() - .map_err(|e| VariantError::FailedToParseSpecies(e))?; + .map_err(VariantError::FailedToParseSpecies)?; - let variant_source: VariantSource = captures.get(4) + let variant_source: VariantSource = captures + .get(4) .expect("Should have been captured already") .as_str() .parse()?; let color = (&species, &variant_source).try_into()?; - Ok(Variant { - species, - color, - }) + Ok(Variant { species, color }) } } @@ -65,34 +69,49 @@ from_str_deserialize_impl!(Variant); #[cfg(test)] mod tests { - use std::str::FromStr; use crate::models::journal_event_content::shared::exploration::species::Species; use crate::models::journal_event_content::shared::exploration::variant::Variant; use crate::models::journal_event_content::shared::exploration::variant_color::VariantColor; + use std::str::FromStr; #[test] fn variant_test_cases_are_processed_correctly() { let test_cases = [ - ("$Codex_Ent_Tussocks_01_F_Name;", Variant { - species: Species::TussockPennata, - color: VariantColor::Yellow, - }), - ("$Codex_Ent_Stratum_07_T_Name;", Variant { - species: Species::StratumTectonicas, - color: VariantColor::Grey, - }), - ("$Codex_Ent_Recepta_03_Yttrium_Name;", Variant { - species: Species::ReceptaConditivus, - color: VariantColor::Green, - }), - ("$Codex_Ent_Fonticulus_02_M_Name;", Variant { - species: Species::FonticuluaCampestris, - color: VariantColor::Amethyst, - }), - ("$Codex_Ent_Bacterial_05_Tellurium_Name;", Variant { - species: Species::BacteriumVesicula, - color: VariantColor::Red, - }), + ( + "$Codex_Ent_Tussocks_01_F_Name;", + Variant { + species: Species::TussockPennata, + color: VariantColor::Yellow, + }, + ), + ( + "$Codex_Ent_Stratum_07_T_Name;", + Variant { + species: Species::StratumTectonicas, + color: VariantColor::Grey, + }, + ), + ( + "$Codex_Ent_Recepta_03_Yttrium_Name;", + Variant { + species: Species::ReceptaConditivus, + color: VariantColor::Green, + }, + ), + ( + "$Codex_Ent_Fonticulus_02_M_Name;", + Variant { + species: Species::FonticuluaCampestris, + color: VariantColor::Amethyst, + }, + ), + ( + "$Codex_Ent_Bacterial_05_Tellurium_Name;", + Variant { + species: Species::BacteriumVesicula, + color: VariantColor::Red, + }, + ), ]; for (case, expected) in test_cases { diff --git a/ed-journals/src/models/journal_event_content/shared/exploration/variant_color.rs b/ed-journals/src/models/journal_event_content/shared/exploration/variant_color.rs index 653d1546..e9c6e201 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration/variant_color.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration/variant_color.rs @@ -1,11 +1,9 @@ -use serde::Deserialize; -use thiserror::Error; use crate::models::journal_event_content::shared::exploration::genus::Genus; use crate::models::journal_event_content::shared::exploration::species::Species; -use crate::models::journal_event_content::shared::exploration::variant::{Variant, VariantError}; use crate::models::journal_event_content::shared::exploration::variant_source::VariantSource; use crate::models::journal_event_content::shared::galaxy::star_class::StarClass; use crate::models::journal_event_content::shared::materials::material::Material; +use thiserror::Error; #[derive(Debug, Clone, PartialEq)] pub enum VariantColor { @@ -76,87 +74,255 @@ impl TryFrom<(&Species, &VariantSource)> for VariantColor { (Genus::BarkMound, _, _) => VariantColor::None, // Bacterium - (_, Species::BacteriumAcies, VariantSource::Material(Material::Antimony)) => VariantColor::Cyan, - (_, Species::BacteriumAcies, VariantSource::Material(Material::Polonium)) => VariantColor::Cyan, - (_, Species::BacteriumAcies, VariantSource::Material(Material::Ruthenium)) => VariantColor::Cobalt, - (_, Species::BacteriumAcies, VariantSource::Material(Material::Technetium)) => VariantColor::Lime, - (_, Species::BacteriumAcies, VariantSource::Material(Material::Tellurium)) => VariantColor::White, - (_, Species::BacteriumAcies, VariantSource::Material(Material::Yttrium)) => VariantColor::Aquamarine, - - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::O)) => VariantColor::Turquoise, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::B)) => VariantColor::Grey, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::A)) => VariantColor::Yellow, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::F)) => VariantColor::Lime, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::G)) => VariantColor::Emerald, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::K)) => VariantColor::Green, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::M)) => VariantColor::Teal, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::L)) => VariantColor::Sage, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::T)) => VariantColor::Red, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::TTS)) => VariantColor::Maroon, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::W)) => VariantColor::Amethyst, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::D)) => VariantColor::Ocher, - (_, Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, VariantSource::StarClass(StarClass::N)) => VariantColor::Indigo, - - (_, Species::BacteriumBullaris, VariantSource::Material(Material::Antimony)) => VariantColor::Cobalt, - (_, Species::BacteriumBullaris, VariantSource::Material(Material::Polonium)) => VariantColor::Yellow, - (_, Species::BacteriumBullaris, VariantSource::Material(Material::Ruthenium)) => VariantColor::Aquamarine, - (_, Species::BacteriumBullaris, VariantSource::Material(Material::Technetium)) => VariantColor::Gold, - (_, Species::BacteriumBullaris, VariantSource::Material(Material::Tellurium)) => VariantColor::Lime, - (_, Species::BacteriumBullaris, VariantSource::Material(Material::Yttrium)) => VariantColor::Red, - - (_, Species::BacteriumInformem, VariantSource::Material(Material::Antimony)) => VariantColor::Red, - (_, Species::BacteriumInformem, VariantSource::Material(Material::Polonium)) => VariantColor::Lime, - (_, Species::BacteriumInformem, VariantSource::Material(Material::Ruthenium)) => VariantColor::Gold, - (_, Species::BacteriumInformem, VariantSource::Material(Material::Technetium)) => VariantColor::Aquamarine, - (_, Species::BacteriumInformem, VariantSource::Material(Material::Tellurium)) => VariantColor::Yellow, - (_, Species::BacteriumInformem, VariantSource::Material(Material::Yttrium)) => VariantColor::Cobalt, - - (_, Species::BacteriumNebulus, VariantSource::Material(Material::Antimony)) => VariantColor::Magenta, - (_, Species::BacteriumNebulus, VariantSource::Material(Material::Polonium)) => VariantColor::Gold, - (_, Species::BacteriumNebulus, VariantSource::Material(Material::Ruthenium)) => VariantColor::Orange, - (_, Species::BacteriumNebulus, VariantSource::Material(Material::Tellurium)) => VariantColor::Green, - (_, Species::BacteriumNebulus, VariantSource::Material(Material::Yttrium)) => VariantColor::Cobalt, - - (_, Species::BacteriumOmentum, VariantSource::Material(Material::Cadmium)) => VariantColor::Lime, - (_, Species::BacteriumOmentum, VariantSource::Material(Material::Mercury)) => VariantColor::White, - (_, Species::BacteriumOmentum, VariantSource::Material(Material::Molybdenum)) => VariantColor::Aquamarine, - (_, Species::BacteriumOmentum, VariantSource::Material(Material::Niobium)) => VariantColor::Peach, - (_, Species::BacteriumOmentum, VariantSource::Material(Material::Tungsten)) => VariantColor::Blue, - (_, Species::BacteriumOmentum, VariantSource::Material(Material::Tin)) => VariantColor::Red, - - (_, Species::BacteriumScopulum, VariantSource::Material(Material::Cadmium)) => VariantColor::White, - (_, Species::BacteriumScopulum, VariantSource::Material(Material::Mercury)) => VariantColor::Peach, - (_, Species::BacteriumScopulum, VariantSource::Material(Material::Molybdenum)) => VariantColor::Lime, - (_, Species::BacteriumScopulum, VariantSource::Material(Material::Niobium)) => VariantColor::Red, - (_, Species::BacteriumScopulum, VariantSource::Material(Material::Tungsten)) => VariantColor::Aquamarine, - (_, Species::BacteriumScopulum, VariantSource::Material(Material::Tin)) => VariantColor::Mulberry, - - (_, Species::BacteriumTela, VariantSource::Material(Material::Cadmium)) => VariantColor::Gold, - (_, Species::BacteriumTela, VariantSource::Material(Material::Mercury)) => VariantColor::Orange, - (_, Species::BacteriumTela, VariantSource::Material(Material::Molybdenum)) => VariantColor::Yellow, - (_, Species::BacteriumTela, VariantSource::Material(Material::Niobium)) => VariantColor::Magenta, - (_, Species::BacteriumTela, VariantSource::Material(Material::Tungsten)) => VariantColor::Green, - (_, Species::BacteriumTela, VariantSource::Material(Material::Tin)) => VariantColor::Cobalt, - - (_, Species::BacteriumVerrata, VariantSource::Material(Material::Cadmium)) => VariantColor::Peach, - (_, Species::BacteriumVerrata, VariantSource::Material(Material::Mercury)) => VariantColor::Red, - (_, Species::BacteriumVerrata, VariantSource::Material(Material::Molybdenum)) => VariantColor::White, - (_, Species::BacteriumVerrata, VariantSource::Material(Material::Niobium)) => VariantColor::Mulberry, - (_, Species::BacteriumVerrata, VariantSource::Material(Material::Tungsten)) => VariantColor::Lime, - (_, Species::BacteriumVerrata, VariantSource::Material(Material::Tin)) => VariantColor::Blue, - - (_, Species::BacteriumVesicula, VariantSource::Material(Material::Antimony)) => VariantColor::Cyan, - (_, Species::BacteriumVesicula, VariantSource::Material(Material::Polonium)) => VariantColor::Orange, - (_, Species::BacteriumVesicula, VariantSource::Material(Material::Ruthenium)) => VariantColor::Mulberry, - (_, Species::BacteriumVesicula, VariantSource::Material(Material::Technetium)) => VariantColor::Gold, - (_, Species::BacteriumVesicula, VariantSource::Material(Material::Tellurium)) => VariantColor::Red, - (_, Species::BacteriumVesicula, VariantSource::Material(Material::Yttrium)) => VariantColor::Lime, - - (_, Species::BacteriumVolu, VariantSource::Material(Material::Antimony)) => VariantColor::Red, - (_, Species::BacteriumVolu, VariantSource::Material(Material::Polonium)) => VariantColor::Aquamarine, - (_, Species::BacteriumVolu, VariantSource::Material(Material::Ruthenium)) => VariantColor::Cobalt, - (_, Species::BacteriumVolu, VariantSource::Material(Material::Tellurium)) => VariantColor::Cyan, - (_, Species::BacteriumVolu, VariantSource::Material(Material::Yttrium)) => VariantColor::Gold, + (_, Species::BacteriumAcies, VariantSource::Material(Material::Antimony)) => { + VariantColor::Cyan + } + (_, Species::BacteriumAcies, VariantSource::Material(Material::Polonium)) => { + VariantColor::Cyan + } + (_, Species::BacteriumAcies, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Cobalt + } + (_, Species::BacteriumAcies, VariantSource::Material(Material::Technetium)) => { + VariantColor::Lime + } + (_, Species::BacteriumAcies, VariantSource::Material(Material::Tellurium)) => { + VariantColor::White + } + (_, Species::BacteriumAcies, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Aquamarine + } + + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::O), + ) => VariantColor::Turquoise, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::B), + ) => VariantColor::Grey, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::A), + ) => VariantColor::Yellow, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::F), + ) => VariantColor::Lime, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::G), + ) => VariantColor::Emerald, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::K), + ) => VariantColor::Green, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::M), + ) => VariantColor::Teal, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::L), + ) => VariantColor::Sage, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::T), + ) => VariantColor::Red, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::TTS), + ) => VariantColor::Maroon, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::W), + ) => VariantColor::Amethyst, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::D), + ) => VariantColor::Ocher, + ( + _, + Species::BacteriumAlcyoneum | Species::BacteriumAurasus | Species::BacteriumCerbrus, + VariantSource::StarClass(StarClass::N), + ) => VariantColor::Indigo, + + (_, Species::BacteriumBullaris, VariantSource::Material(Material::Antimony)) => { + VariantColor::Cobalt + } + (_, Species::BacteriumBullaris, VariantSource::Material(Material::Polonium)) => { + VariantColor::Yellow + } + (_, Species::BacteriumBullaris, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Aquamarine + } + (_, Species::BacteriumBullaris, VariantSource::Material(Material::Technetium)) => { + VariantColor::Gold + } + (_, Species::BacteriumBullaris, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Lime + } + (_, Species::BacteriumBullaris, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Red + } + + (_, Species::BacteriumInformem, VariantSource::Material(Material::Antimony)) => { + VariantColor::Red + } + (_, Species::BacteriumInformem, VariantSource::Material(Material::Polonium)) => { + VariantColor::Lime + } + (_, Species::BacteriumInformem, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Gold + } + (_, Species::BacteriumInformem, VariantSource::Material(Material::Technetium)) => { + VariantColor::Aquamarine + } + (_, Species::BacteriumInformem, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Yellow + } + (_, Species::BacteriumInformem, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Cobalt + } + + (_, Species::BacteriumNebulus, VariantSource::Material(Material::Antimony)) => { + VariantColor::Magenta + } + (_, Species::BacteriumNebulus, VariantSource::Material(Material::Polonium)) => { + VariantColor::Gold + } + (_, Species::BacteriumNebulus, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Orange + } + (_, Species::BacteriumNebulus, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Green + } + (_, Species::BacteriumNebulus, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Cobalt + } + + (_, Species::BacteriumOmentum, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Lime + } + (_, Species::BacteriumOmentum, VariantSource::Material(Material::Mercury)) => { + VariantColor::White + } + (_, Species::BacteriumOmentum, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Aquamarine + } + (_, Species::BacteriumOmentum, VariantSource::Material(Material::Niobium)) => { + VariantColor::Peach + } + (_, Species::BacteriumOmentum, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Blue + } + (_, Species::BacteriumOmentum, VariantSource::Material(Material::Tin)) => { + VariantColor::Red + } + + (_, Species::BacteriumScopulum, VariantSource::Material(Material::Cadmium)) => { + VariantColor::White + } + (_, Species::BacteriumScopulum, VariantSource::Material(Material::Mercury)) => { + VariantColor::Peach + } + (_, Species::BacteriumScopulum, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Lime + } + (_, Species::BacteriumScopulum, VariantSource::Material(Material::Niobium)) => { + VariantColor::Red + } + (_, Species::BacteriumScopulum, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Aquamarine + } + (_, Species::BacteriumScopulum, VariantSource::Material(Material::Tin)) => { + VariantColor::Mulberry + } + + (_, Species::BacteriumTela, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Gold + } + (_, Species::BacteriumTela, VariantSource::Material(Material::Mercury)) => { + VariantColor::Orange + } + (_, Species::BacteriumTela, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Yellow + } + (_, Species::BacteriumTela, VariantSource::Material(Material::Niobium)) => { + VariantColor::Magenta + } + (_, Species::BacteriumTela, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Green + } + (_, Species::BacteriumTela, VariantSource::Material(Material::Tin)) => { + VariantColor::Cobalt + } + + (_, Species::BacteriumVerrata, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Peach + } + (_, Species::BacteriumVerrata, VariantSource::Material(Material::Mercury)) => { + VariantColor::Red + } + (_, Species::BacteriumVerrata, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::White + } + (_, Species::BacteriumVerrata, VariantSource::Material(Material::Niobium)) => { + VariantColor::Mulberry + } + (_, Species::BacteriumVerrata, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Lime + } + (_, Species::BacteriumVerrata, VariantSource::Material(Material::Tin)) => { + VariantColor::Blue + } + + (_, Species::BacteriumVesicula, VariantSource::Material(Material::Antimony)) => { + VariantColor::Cyan + } + (_, Species::BacteriumVesicula, VariantSource::Material(Material::Polonium)) => { + VariantColor::Orange + } + (_, Species::BacteriumVesicula, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Mulberry + } + (_, Species::BacteriumVesicula, VariantSource::Material(Material::Technetium)) => { + VariantColor::Gold + } + (_, Species::BacteriumVesicula, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Red + } + (_, Species::BacteriumVesicula, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Lime + } + + (_, Species::BacteriumVolu, VariantSource::Material(Material::Antimony)) => { + VariantColor::Red + } + (_, Species::BacteriumVolu, VariantSource::Material(Material::Polonium)) => { + VariantColor::Aquamarine + } + (_, Species::BacteriumVolu, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Cobalt + } + (_, Species::BacteriumVolu, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Cyan + } + (_, Species::BacteriumVolu, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Gold + } (Genus::BrainTree, _, _) => VariantColor::None, @@ -177,52 +343,122 @@ impl TryFrom<(&Species, &VariantSource)> for VariantColor { (Genus::Clypeus, _, VariantSource::StarClass(StarClass::L)) => VariantColor::Teal, (Genus::Clypeus, _, VariantSource::StarClass(StarClass::N)) => VariantColor::Yellow, - (_, Species::ConchaAureolas | Species::ConchaLabiata, VariantSource::StarClass(StarClass::A)) => VariantColor::Teal, - (_, Species::ConchaAureolas | Species::ConchaLabiata, VariantSource::StarClass(StarClass::F)) => VariantColor::Grey, - (_, Species::ConchaAureolas | Species::ConchaLabiata, VariantSource::StarClass(StarClass::G)) => VariantColor::Turquoise, - (_, Species::ConchaAureolas | Species::ConchaLabiata, VariantSource::StarClass(StarClass::K)) => VariantColor::Red, - (_, Species::ConchaAureolas | Species::ConchaLabiata, VariantSource::StarClass(StarClass::L)) => VariantColor::Orange, - (_, Species::ConchaAureolas | Species::ConchaLabiata, VariantSource::StarClass(StarClass::N)) => VariantColor::Emerald, - - (_, Species::ConchaBiconcavis, VariantSource::Material(Material::Antimony)) => VariantColor::Peach, - (_, Species::ConchaBiconcavis, VariantSource::Material(Material::Ruthenium)) => VariantColor::Orange, - - (_, Species::ConchaRenibus, VariantSource::Material(Material::Cadmium)) => VariantColor::Red, - (_, Species::ConchaRenibus, VariantSource::Material(Material::Mercury)) => VariantColor::Mulberry, - (_, Species::ConchaRenibus, VariantSource::Material(Material::Molybdenum)) => VariantColor::Peach, - (_, Species::ConchaRenibus, VariantSource::Material(Material::Niobium)) => VariantColor::Blue, - (_, Species::ConchaRenibus, VariantSource::Material(Material::Tungsten)) => VariantColor::White, - (_, Species::ConchaRenibus, VariantSource::Material(Material::Tin)) => VariantColor::Aquamarine, + ( + _, + Species::ConchaAureolas | Species::ConchaLabiata, + VariantSource::StarClass(StarClass::A), + ) => VariantColor::Teal, + ( + _, + Species::ConchaAureolas | Species::ConchaLabiata, + VariantSource::StarClass(StarClass::F), + ) => VariantColor::Grey, + ( + _, + Species::ConchaAureolas | Species::ConchaLabiata, + VariantSource::StarClass(StarClass::G), + ) => VariantColor::Turquoise, + ( + _, + Species::ConchaAureolas | Species::ConchaLabiata, + VariantSource::StarClass(StarClass::K), + ) => VariantColor::Red, + ( + _, + Species::ConchaAureolas | Species::ConchaLabiata, + VariantSource::StarClass(StarClass::L), + ) => VariantColor::Orange, + ( + _, + Species::ConchaAureolas | Species::ConchaLabiata, + VariantSource::StarClass(StarClass::N), + ) => VariantColor::Emerald, + + (_, Species::ConchaBiconcavis, VariantSource::Material(Material::Antimony)) => { + VariantColor::Peach + } + (_, Species::ConchaBiconcavis, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Orange + } + + (_, Species::ConchaRenibus, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Red + } + (_, Species::ConchaRenibus, VariantSource::Material(Material::Mercury)) => { + VariantColor::Mulberry + } + (_, Species::ConchaRenibus, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Peach + } + (_, Species::ConchaRenibus, VariantSource::Material(Material::Niobium)) => { + VariantColor::Blue + } + (_, Species::ConchaRenibus, VariantSource::Material(Material::Tungsten)) => { + VariantColor::White + } + (_, Species::ConchaRenibus, VariantSource::Material(Material::Tin)) => { + VariantColor::Aquamarine + } (Genus::CrystallineShards, _, _) => VariantColor::None, - (_, Species::ElectricaePluma, VariantSource::Material(Material::Antimony)) => VariantColor::Cobalt, - (_, Species::ElectricaePluma, VariantSource::Material(Material::Polonium)) => VariantColor::Cyan, - (_, Species::ElectricaePluma, VariantSource::Material(Material::Ruthenium)) => VariantColor::Blue, - (_, Species::ElectricaePluma, VariantSource::Material(Material::Technetium)) => VariantColor::Magenta, - (_, Species::ElectricaePluma, VariantSource::Material(Material::Tellurium)) => VariantColor::Red, - (_, Species::ElectricaePluma, VariantSource::Material(Material::Yttrium)) => VariantColor::Mulberry, - - (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Antimony)) => VariantColor::Cyan, - (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Polonium)) => VariantColor::Cobalt, - (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Ruthenium)) => VariantColor::Blue, - (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Technetium)) => VariantColor::Aquamarine, - (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Tellurium)) => VariantColor::Magenta, - (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Yttrium)) => VariantColor::Green, + (_, Species::ElectricaePluma, VariantSource::Material(Material::Antimony)) => { + VariantColor::Cobalt + } + (_, Species::ElectricaePluma, VariantSource::Material(Material::Polonium)) => { + VariantColor::Cyan + } + (_, Species::ElectricaePluma, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Blue + } + (_, Species::ElectricaePluma, VariantSource::Material(Material::Technetium)) => { + VariantColor::Magenta + } + (_, Species::ElectricaePluma, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Red + } + (_, Species::ElectricaePluma, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Mulberry + } + + (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Antimony)) => { + VariantColor::Cyan + } + (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Polonium)) => { + VariantColor::Cobalt + } + (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Blue + } + (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Technetium)) => { + VariantColor::Aquamarine + } + (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Magenta + } + (_, Species::ElectricaeRadialem, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Green + } (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::B)) => VariantColor::Lime, (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::A)) => VariantColor::Green, (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::F)) => VariantColor::Yellow, (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::G)) => VariantColor::Teal, (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::K)) => VariantColor::Emerald, - (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::M)) => VariantColor::Amethyst, + (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::M)) => { + VariantColor::Amethyst + } (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::L)) => VariantColor::Mauve, (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::T)) => VariantColor::Orange, (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::TTS)) => VariantColor::Red, (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::Y)) => VariantColor::Ocher, - (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::D)) => VariantColor::Turquoise, + (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::D)) => { + VariantColor::Turquoise + } (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::N)) => VariantColor::Sage, - (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::AeBe)) => VariantColor::Maroon, + (Genus::Fonticulua, _, VariantSource::StarClass(StarClass::AeBe)) => { + VariantColor::Maroon + } (Genus::Fruxeta, _, VariantSource::StarClass(StarClass::B)) => VariantColor::Lime, (Genus::Fruxeta, _, VariantSource::StarClass(StarClass::F)) => VariantColor::Green, @@ -233,109 +469,319 @@ impl TryFrom<(&Species, &VariantSource)> for VariantColor { (Genus::Fruxeta, _, VariantSource::StarClass(StarClass::D)) => VariantColor::Indigo, (Genus::Fruxeta, _, VariantSource::StarClass(StarClass::N)) => VariantColor::Red, - (_, Species::FumerolaAquatis, VariantSource::Material(Material::Cadmium)) => VariantColor::Green, - (_, Species::FumerolaAquatis, VariantSource::Material(Material::Mercury)) => VariantColor::Yellow, - (_, Species::FumerolaAquatis, VariantSource::Material(Material::Molybdenum)) => VariantColor::Cyan, - (_, Species::FumerolaAquatis, VariantSource::Material(Material::Niobium)) => VariantColor::Gold, - (_, Species::FumerolaAquatis, VariantSource::Material(Material::Tungsten)) => VariantColor::Cobalt, - (_, Species::FumerolaAquatis, VariantSource::Material(Material::Tin)) => VariantColor::Orange, - - (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Cadmium)) => VariantColor::Orange, - (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Mercury)) => VariantColor::Magenta, - (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Molybdenum)) => VariantColor::Gold, - (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Niobium)) => VariantColor::Cobalt, - (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Tungsten)) => VariantColor::Yellow, - (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Tin)) => VariantColor::Teal, - - (_, Species::FumerolaExtremus, VariantSource::Material(Material::Mercury)) => VariantColor::Lime, - (_, Species::FumerolaExtremus, VariantSource::Material(Material::Molybdenum)) => VariantColor::Blue, - (_, Species::FumerolaExtremus, VariantSource::Material(Material::Niobium)) => VariantColor::White, - (_, Species::FumerolaExtremus, VariantSource::Material(Material::Tungsten)) => VariantColor::Mulberry, - (_, Species::FumerolaExtremus, VariantSource::Material(Material::Tin)) => VariantColor::Peach, - - (_, Species::FumerolaNitris, VariantSource::Material(Material::Cadmium)) => VariantColor::White, - (_, Species::FumerolaNitris, VariantSource::Material(Material::Mercury)) => VariantColor::Peach, - (_, Species::FumerolaNitris, VariantSource::Material(Material::Molybdenum)) => VariantColor::Lime, - (_, Species::FumerolaNitris, VariantSource::Material(Material::Niobium)) => VariantColor::Red, - (_, Species::FumerolaNitris, VariantSource::Material(Material::Tungsten)) => VariantColor::Aquamarine, - (_, Species::FumerolaNitris, VariantSource::Material(Material::Tin)) => VariantColor::Mulberry, - - (_, Species::FungoidaBullarum, VariantSource::Material(Material::Antimony)) => VariantColor::Red, - (_, Species::FungoidaBullarum, VariantSource::Material(Material::Polonium)) => VariantColor::Mulberry, - (_, Species::FungoidaBullarum, VariantSource::Material(Material::Ruthenium)) => VariantColor::Magenta, - (_, Species::FungoidaBullarum, VariantSource::Material(Material::Technetium)) => VariantColor::Peach, - (_, Species::FungoidaBullarum, VariantSource::Material(Material::Tellurium)) => VariantColor::Gold, - (_, Species::FungoidaBullarum, VariantSource::Material(Material::Yttrium)) => VariantColor::Orange, - - (_, Species::FungoidaGelata, VariantSource::Material(Material::Cadmium)) => VariantColor::Cyan, - (_, Species::FungoidaGelata, VariantSource::Material(Material::Mercury)) => VariantColor::Lime, - (_, Species::FungoidaGelata, VariantSource::Material(Material::Molybdenum)) => VariantColor::Mulberry, - (_, Species::FungoidaGelata, VariantSource::Material(Material::Niobium)) => VariantColor::Green, - (_, Species::FungoidaGelata, VariantSource::Material(Material::Tungsten)) => VariantColor::Orange, - (_, Species::FungoidaGelata, VariantSource::Material(Material::Tin)) => VariantColor::Red, - - (_, Species::FungoidaSetisis, VariantSource::Material(Material::Antimony)) => VariantColor::Peach, - (_, Species::FungoidaSetisis, VariantSource::Material(Material::Polonium)) => VariantColor::White, - (_, Species::FungoidaSetisis, VariantSource::Material(Material::Ruthenium)) => VariantColor::Gold, - (_, Species::FungoidaSetisis, VariantSource::Material(Material::Technetium)) => VariantColor::Lime, - (_, Species::FungoidaSetisis, VariantSource::Material(Material::Tellurium)) => VariantColor::Yellow, - (_, Species::FungoidaSetisis, VariantSource::Material(Material::Yttrium)) => VariantColor::Orange, - - (_, Species::FungoidaStabitis, VariantSource::Material(Material::Cadmium)) => VariantColor::Blue, - (_, Species::FungoidaStabitis, VariantSource::Material(Material::Mercury)) => VariantColor::Green, - (_, Species::FungoidaStabitis, VariantSource::Material(Material::Molybdenum)) => VariantColor::Magenta, - (_, Species::FungoidaStabitis, VariantSource::Material(Material::Niobium)) => VariantColor::White, - (_, Species::FungoidaStabitis, VariantSource::Material(Material::Tungsten)) => VariantColor::Peach, - (_, Species::FungoidaStabitis, VariantSource::Material(Material::Tin)) => VariantColor::Orange, - - (_, Species::OsseusCornibus | Species::OsseusFractus | Species::OsseusPellebantus | Species::OsseusSpiralis, VariantSource::StarClass(StarClass::A)) => VariantColor::Lime, - (_, Species::OsseusCornibus | Species::OsseusFractus | Species::OsseusPellebantus | Species::OsseusSpiralis, VariantSource::StarClass(StarClass::F)) => VariantColor::Turquoise, - (_, Species::OsseusCornibus | Species::OsseusFractus | Species::OsseusPellebantus | Species::OsseusSpiralis, VariantSource::StarClass(StarClass::G)) => VariantColor::Grey, - (_, Species::OsseusCornibus | Species::OsseusFractus | Species::OsseusPellebantus | Species::OsseusSpiralis, VariantSource::StarClass(StarClass::K)) => VariantColor::Indigo, - (_, Species::OsseusCornibus | Species::OsseusFractus | Species::OsseusPellebantus | Species::OsseusSpiralis, VariantSource::StarClass(StarClass::T)) => VariantColor::Emerald, - (_, Species::OsseusCornibus | Species::OsseusFractus | Species::OsseusPellebantus | Species::OsseusSpiralis, VariantSource::StarClass(StarClass::TTS)) => VariantColor::Green, - - (_, Species::OsseusDiscus, VariantSource::Material(Material::Cadmium)) => VariantColor::White, - (_, Species::OsseusDiscus, VariantSource::Material(Material::Mercury)) => VariantColor::Lime, - (_, Species::OsseusDiscus, VariantSource::Material(Material::Molybdenum)) => VariantColor::Peach, - (_, Species::OsseusDiscus, VariantSource::Material(Material::Niobium)) => VariantColor::Aquamarine, - (_, Species::OsseusDiscus, VariantSource::Material(Material::Tungsten)) => VariantColor::Red, - (_, Species::OsseusDiscus, VariantSource::Material(Material::Tin)) => VariantColor::Blue, - - (_, Species::OsseusPumice, VariantSource::Material(Material::Antimony)) => VariantColor::White, - (_, Species::OsseusPumice, VariantSource::Material(Material::Polonium)) => VariantColor::Peach, - (_, Species::OsseusPumice, VariantSource::Material(Material::Ruthenium)) => VariantColor::Gold, - (_, Species::OsseusPumice, VariantSource::Material(Material::Technetium)) => VariantColor::Lime, - (_, Species::OsseusPumice, VariantSource::Material(Material::Tellurium)) => VariantColor::Green, - (_, Species::OsseusPumice, VariantSource::Material(Material::Yttrium)) => VariantColor::Yellow, - - (_, Species::ReceptaConditivus, VariantSource::Material(Material::Yttrium)) => VariantColor::Green, - (_, Species::ReceptaConditivus, VariantSource::Material(Material::Antimony)) => VariantColor::Lime, - (_, Species::ReceptaConditivus, VariantSource::Material(Material::Polonium)) => VariantColor::White, - (_, Species::ReceptaConditivus, VariantSource::Material(Material::Ruthenium)) => VariantColor::Yellow, - (_, Species::ReceptaConditivus, VariantSource::Material(Material::Tellurium)) => VariantColor::Cyan, - (_, Species::ReceptaConditivus, VariantSource::Material(Material::Technetium)) => VariantColor::Aquamarine, - - (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Niobium)) => VariantColor::Mulberry, - (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Molybdenum)) => VariantColor::Gold, - (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Cadmium)) => VariantColor::Lime, - (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Tin)) => VariantColor::Orange, - (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Mercury)) => VariantColor::Cyan, - (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Tungsten)) => VariantColor::Red, - - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::L)) => VariantColor::Ocher, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::TTS)) => VariantColor::Sage, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::T)) => VariantColor::Teal, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::B)) => VariantColor::Turquoise, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::M)) => VariantColor::Maroon, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::A)) => VariantColor::Amethyst, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::F)) => VariantColor::Mauve, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::G)) => VariantColor::Orange, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::K)) => VariantColor::Red, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::D)) => VariantColor::Yellow, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::Y)) => VariantColor::Lime, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::N)) => VariantColor::Emerald, - (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::Ae)) => VariantColor::Grey, + (_, Species::FumerolaAquatis, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Green + } + (_, Species::FumerolaAquatis, VariantSource::Material(Material::Mercury)) => { + VariantColor::Yellow + } + (_, Species::FumerolaAquatis, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Cyan + } + (_, Species::FumerolaAquatis, VariantSource::Material(Material::Niobium)) => { + VariantColor::Gold + } + (_, Species::FumerolaAquatis, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Cobalt + } + (_, Species::FumerolaAquatis, VariantSource::Material(Material::Tin)) => { + VariantColor::Orange + } + + (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Orange + } + (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Mercury)) => { + VariantColor::Magenta + } + (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Gold + } + (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Niobium)) => { + VariantColor::Cobalt + } + (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Yellow + } + (_, Species::FumerolaCarbosis, VariantSource::Material(Material::Tin)) => { + VariantColor::Teal + } + + (_, Species::FumerolaExtremus, VariantSource::Material(Material::Mercury)) => { + VariantColor::Lime + } + (_, Species::FumerolaExtremus, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Blue + } + (_, Species::FumerolaExtremus, VariantSource::Material(Material::Niobium)) => { + VariantColor::White + } + (_, Species::FumerolaExtremus, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Mulberry + } + (_, Species::FumerolaExtremus, VariantSource::Material(Material::Tin)) => { + VariantColor::Peach + } + + (_, Species::FumerolaNitris, VariantSource::Material(Material::Cadmium)) => { + VariantColor::White + } + (_, Species::FumerolaNitris, VariantSource::Material(Material::Mercury)) => { + VariantColor::Peach + } + (_, Species::FumerolaNitris, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Lime + } + (_, Species::FumerolaNitris, VariantSource::Material(Material::Niobium)) => { + VariantColor::Red + } + (_, Species::FumerolaNitris, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Aquamarine + } + (_, Species::FumerolaNitris, VariantSource::Material(Material::Tin)) => { + VariantColor::Mulberry + } + + (_, Species::FungoidaBullarum, VariantSource::Material(Material::Antimony)) => { + VariantColor::Red + } + (_, Species::FungoidaBullarum, VariantSource::Material(Material::Polonium)) => { + VariantColor::Mulberry + } + (_, Species::FungoidaBullarum, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Magenta + } + (_, Species::FungoidaBullarum, VariantSource::Material(Material::Technetium)) => { + VariantColor::Peach + } + (_, Species::FungoidaBullarum, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Gold + } + (_, Species::FungoidaBullarum, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Orange + } + + (_, Species::FungoidaGelata, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Cyan + } + (_, Species::FungoidaGelata, VariantSource::Material(Material::Mercury)) => { + VariantColor::Lime + } + (_, Species::FungoidaGelata, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Mulberry + } + (_, Species::FungoidaGelata, VariantSource::Material(Material::Niobium)) => { + VariantColor::Green + } + (_, Species::FungoidaGelata, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Orange + } + (_, Species::FungoidaGelata, VariantSource::Material(Material::Tin)) => { + VariantColor::Red + } + + (_, Species::FungoidaSetisis, VariantSource::Material(Material::Antimony)) => { + VariantColor::Peach + } + (_, Species::FungoidaSetisis, VariantSource::Material(Material::Polonium)) => { + VariantColor::White + } + (_, Species::FungoidaSetisis, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Gold + } + (_, Species::FungoidaSetisis, VariantSource::Material(Material::Technetium)) => { + VariantColor::Lime + } + (_, Species::FungoidaSetisis, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Yellow + } + (_, Species::FungoidaSetisis, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Orange + } + + (_, Species::FungoidaStabitis, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Blue + } + (_, Species::FungoidaStabitis, VariantSource::Material(Material::Mercury)) => { + VariantColor::Green + } + (_, Species::FungoidaStabitis, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Magenta + } + (_, Species::FungoidaStabitis, VariantSource::Material(Material::Niobium)) => { + VariantColor::White + } + (_, Species::FungoidaStabitis, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Peach + } + (_, Species::FungoidaStabitis, VariantSource::Material(Material::Tin)) => { + VariantColor::Orange + } + + ( + _, + Species::OsseusCornibus + | Species::OsseusFractus + | Species::OsseusPellebantus + | Species::OsseusSpiralis, + VariantSource::StarClass(StarClass::A), + ) => VariantColor::Lime, + ( + _, + Species::OsseusCornibus + | Species::OsseusFractus + | Species::OsseusPellebantus + | Species::OsseusSpiralis, + VariantSource::StarClass(StarClass::F), + ) => VariantColor::Turquoise, + ( + _, + Species::OsseusCornibus + | Species::OsseusFractus + | Species::OsseusPellebantus + | Species::OsseusSpiralis, + VariantSource::StarClass(StarClass::G), + ) => VariantColor::Grey, + ( + _, + Species::OsseusCornibus + | Species::OsseusFractus + | Species::OsseusPellebantus + | Species::OsseusSpiralis, + VariantSource::StarClass(StarClass::K), + ) => VariantColor::Indigo, + ( + _, + Species::OsseusCornibus + | Species::OsseusFractus + | Species::OsseusPellebantus + | Species::OsseusSpiralis, + VariantSource::StarClass(StarClass::T), + ) => VariantColor::Emerald, + ( + _, + Species::OsseusCornibus + | Species::OsseusFractus + | Species::OsseusPellebantus + | Species::OsseusSpiralis, + VariantSource::StarClass(StarClass::TTS), + ) => VariantColor::Green, + + (_, Species::OsseusDiscus, VariantSource::Material(Material::Cadmium)) => { + VariantColor::White + } + (_, Species::OsseusDiscus, VariantSource::Material(Material::Mercury)) => { + VariantColor::Lime + } + (_, Species::OsseusDiscus, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Peach + } + (_, Species::OsseusDiscus, VariantSource::Material(Material::Niobium)) => { + VariantColor::Aquamarine + } + (_, Species::OsseusDiscus, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Red + } + (_, Species::OsseusDiscus, VariantSource::Material(Material::Tin)) => { + VariantColor::Blue + } + + (_, Species::OsseusPumice, VariantSource::Material(Material::Antimony)) => { + VariantColor::White + } + (_, Species::OsseusPumice, VariantSource::Material(Material::Polonium)) => { + VariantColor::Peach + } + (_, Species::OsseusPumice, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Gold + } + (_, Species::OsseusPumice, VariantSource::Material(Material::Technetium)) => { + VariantColor::Lime + } + (_, Species::OsseusPumice, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Green + } + (_, Species::OsseusPumice, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Yellow + } + + (_, Species::ReceptaConditivus, VariantSource::Material(Material::Yttrium)) => { + VariantColor::Green + } + (_, Species::ReceptaConditivus, VariantSource::Material(Material::Antimony)) => { + VariantColor::Lime + } + (_, Species::ReceptaConditivus, VariantSource::Material(Material::Polonium)) => { + VariantColor::White + } + (_, Species::ReceptaConditivus, VariantSource::Material(Material::Ruthenium)) => { + VariantColor::Yellow + } + (_, Species::ReceptaConditivus, VariantSource::Material(Material::Tellurium)) => { + VariantColor::Cyan + } + (_, Species::ReceptaConditivus, VariantSource::Material(Material::Technetium)) => { + VariantColor::Aquamarine + } + + (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Niobium)) => { + VariantColor::Mulberry + } + (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Molybdenum)) => { + VariantColor::Gold + } + (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Cadmium)) => { + VariantColor::Lime + } + (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Tin)) => { + VariantColor::Orange + } + (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Mercury)) => { + VariantColor::Cyan + } + (_, Species::ReceptaDeltahedronix, VariantSource::Material(Material::Tungsten)) => { + VariantColor::Red + } + + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::L)) => { + VariantColor::Ocher + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::TTS)) => { + VariantColor::Sage + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::T)) => { + VariantColor::Teal + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::B)) => { + VariantColor::Turquoise + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::M)) => { + VariantColor::Maroon + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::A)) => { + VariantColor::Amethyst + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::F)) => { + VariantColor::Mauve + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::G)) => { + VariantColor::Orange + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::K)) => { + VariantColor::Red + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::D)) => { + VariantColor::Yellow + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::Y)) => { + VariantColor::Lime + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::N)) => { + VariantColor::Emerald + } + (_, Species::ReceptaUmbrux, VariantSource::StarClass(StarClass::Ae)) => { + VariantColor::Grey + } (Genus::Stratum, _, VariantSource::StarClass(StarClass::F)) => VariantColor::Emerald, (Genus::Stratum, _, VariantSource::StarClass(StarClass::K)) => VariantColor::Lime, @@ -373,7 +819,7 @@ impl TryFrom<(&Species, &VariantSource)> for VariantColor { (_, _, _) => { dbg!(value); return Err(VariantColorError::UnknownVariant); - }, + } }) } } diff --git a/ed-journals/src/models/journal_event_content/shared/exploration/variant_source.rs b/ed-journals/src/models/journal_event_content/shared/exploration/variant_source.rs index b65293d7..0198089c 100644 --- a/ed-journals/src/models/journal_event_content/shared/exploration/variant_source.rs +++ b/ed-journals/src/models/journal_event_content/shared/exploration/variant_source.rs @@ -1,11 +1,9 @@ -use std::str::FromStr; +use crate::models::journal_event_content::shared::galaxy::star_class::StarClass; +use crate::models::journal_event_content::shared::materials::material::Material; use serde::Deserialize; use serde_json::Value; +use std::str::FromStr; use thiserror::Error; -use crate::models::journal_event_content::shared::exploration::species::Species; -use crate::models::journal_event_content::shared::exploration::variant::VariantError; -use crate::models::journal_event_content::shared::galaxy::star_class::StarClass; -use crate::models::journal_event_content::shared::materials::material::Material; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(untagged)] @@ -19,7 +17,9 @@ pub enum VariantSourceError { #[error("Failed to parse variant source: {0}")] FailedToParse(#[source] serde_json::Error), - #[error("The provided material cannot be used as a variant source as it's not a raw material.")] + #[error( + "The provided material cannot be used as a variant source as it's not a raw material." + )] NotARawMaterial, } @@ -28,7 +28,7 @@ impl FromStr for VariantSource { fn from_str(s: &str) -> Result { let variant_source = serde_json::from_value(Value::String(s.to_ascii_lowercase())) - .map_err(|e| VariantSourceError::FailedToParse(e))?; + .map_err(VariantSourceError::FailedToParse)?; if let VariantSource::Material(material) = &variant_source { if !material.is_raw() { diff --git a/ed-journals/src/models/journal_event_content/shared/galaxy.rs b/ed-journals/src/models/journal_event_content/shared/galaxy.rs index 2dc005f1..7e55a517 100644 --- a/ed-journals/src/models/journal_event_content/shared/galaxy.rs +++ b/ed-journals/src/models/journal_event_content/shared/galaxy.rs @@ -1,13 +1,13 @@ +pub mod atmosphere; +pub mod atmosphere_element; +pub mod atmosphere_type; pub mod body_type; -pub mod star_class; +pub mod orbit_info; +pub mod planet_class; pub mod region; +pub mod ring_class; +pub mod star_class; pub mod star_luminosity; pub mod terraform_state; -pub mod planet_class; -pub mod atmosphere; -pub mod atmosphere_element; pub mod volcanism; pub mod volcanism_type; -pub mod atmosphere_type; -pub mod orbit_info; -pub mod ring_class; diff --git a/ed-journals/src/models/journal_event_content/shared/galaxy/atmosphere.rs b/ed-journals/src/models/journal_event_content/shared/galaxy/atmosphere.rs index 2d67596e..980927cc 100644 --- a/ed-journals/src/models/journal_event_content/shared/galaxy/atmosphere.rs +++ b/ed-journals/src/models/journal_event_content/shared/galaxy/atmosphere.rs @@ -1,10 +1,10 @@ -use std::str::FromStr; +use crate::from_str_deserialize_impl; +use crate::models::journal_event_content::shared::galaxy::atmosphere_type::AtmosphereType; use once_cell::sync::Lazy; -use regex::{Match, Regex}; +use regex::Regex; use serde::Deserialize; +use std::str::FromStr; use thiserror::Error; -use crate::from_str_deserialize_impl; -use crate::models::journal_event_content::shared::galaxy::atmosphere_type::AtmosphereType; #[derive(Debug, Clone, PartialEq)] pub struct Atmosphere { @@ -29,13 +29,14 @@ pub enum AtmosphereError { FailedToParse(String), } -const ATMOSPHERE_REGEX: Lazy = Lazy::new(|| Regex::new(r#"^(hot )?((thin|thick) )?([a-zA-Z ]+)? atmosphere$"#).unwrap()); +const ATMOSPHERE_REGEX: Lazy = + Lazy::new(|| Regex::new(r#"^(hot )?((thin|thick) )?([a-zA-Z ]+)? atmosphere$"#).unwrap()); impl FromStr for Atmosphere { type Err = AtmosphereError; fn from_str(s: &str) -> Result { - if s == "" { + if s.is_empty() { return Ok(Atmosphere { hot: false, density: AtmosphereDensity::Normal, @@ -70,13 +71,9 @@ impl FromStr for Atmosphere { let kind = kind_capture .as_str() .parse() - .map_err(|e| AtmosphereError::UnknownAtmosphereType(e))?; + .map_err(AtmosphereError::UnknownAtmosphereType)?; - Ok(Atmosphere { - kind, - hot, - density, - }) + Ok(Atmosphere { kind, hot, density }) } } diff --git a/ed-journals/src/models/journal_event_content/shared/galaxy/atmosphere_type.rs b/ed-journals/src/models/journal_event_content/shared/galaxy/atmosphere_type.rs index 4e83279c..329b3526 100644 --- a/ed-journals/src/models/journal_event_content/shared/galaxy/atmosphere_type.rs +++ b/ed-journals/src/models/journal_event_content/shared/galaxy/atmosphere_type.rs @@ -1,6 +1,6 @@ -use std::str::FromStr; use serde::Deserialize; use serde_json::Value; +use std::str::FromStr; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum AtmosphereType { diff --git a/ed-journals/src/models/journal_event_content/shared/galaxy/star_class.rs b/ed-journals/src/models/journal_event_content/shared/galaxy/star_class.rs index c876b6fd..02b57f07 100644 --- a/ed-journals/src/models/journal_event_content/shared/galaxy/star_class.rs +++ b/ed-journals/src/models/journal_event_content/shared/galaxy/star_class.rs @@ -1,6 +1,6 @@ +use crate::from_str_deserialize_impl; use std::str::FromStr; use thiserror::Error; -use crate::from_str_deserialize_impl; #[derive(Debug, Clone, PartialEq)] pub enum StarClass { @@ -60,10 +60,10 @@ pub enum StarClass { SupermassiveBlackHole, ABlueWhiteSuperGiant, // A_BlueWhiteSuperGiant - FWhiteSuperGiant, // F_WhiteSuperGiant - MRedSuperGiant, // M_RedSuperGiant - MRedGiant, // M_RedGiant - KOrangeGiant, // K_OrangeGiant + FWhiteSuperGiant, // F_WhiteSuperGiant + MRedSuperGiant, // M_RedSuperGiant + MRedGiant, // M_RedGiant + KOrangeGiant, // K_OrangeGiant RoguePlanet, Nebula, StellarRemnantNebula, @@ -134,8 +134,12 @@ impl FromStr for StarClass { "X" | "x" => StarClass::X, "SupermassiveBlackHole" | "supermassiveblackhole" => StarClass::SupermassiveBlackHole, - "ABlueWhiteSuperGiant" | "abluewhitesupergiant" | "A_BlueWhiteSuperGiant" => StarClass::ABlueWhiteSuperGiant, - "FWhiteSuperGiant" | "fwhitesupergiant" | "F_WhiteSuperGiant" => StarClass::FWhiteSuperGiant, + "ABlueWhiteSuperGiant" | "abluewhitesupergiant" | "A_BlueWhiteSuperGiant" => { + StarClass::ABlueWhiteSuperGiant + } + "FWhiteSuperGiant" | "fwhitesupergiant" | "F_WhiteSuperGiant" => { + StarClass::FWhiteSuperGiant + } "MRedSuperGiant" | "mredsupergiant" | "M_RedSuperGiant" => StarClass::MRedSuperGiant, "MRedGiant" | "mredgiant" | "M_RedGiant" => StarClass::KOrangeGiant, "KOrangeGiant" | "korangegiant" | "K_OrangeGiant" => StarClass::KOrangeGiant, diff --git a/ed-journals/src/models/journal_event_content/shared/galaxy/volcanism.rs b/ed-journals/src/models/journal_event_content/shared/galaxy/volcanism.rs index ddd6142d..789ad552 100644 --- a/ed-journals/src/models/journal_event_content/shared/galaxy/volcanism.rs +++ b/ed-journals/src/models/journal_event_content/shared/galaxy/volcanism.rs @@ -1,10 +1,10 @@ -use std::str::FromStr; +use crate::from_str_deserialize_impl; +use crate::models::journal_event_content::shared::galaxy::volcanism_type::VolcanismType; use once_cell::sync::Lazy; use regex::Regex; use serde::Deserialize; +use std::str::FromStr; use thiserror::Error; -use crate::from_str_deserialize_impl; -use crate::models::journal_event_content::shared::galaxy::volcanism_type::VolcanismType; #[derive(Debug, Clone, PartialEq)] pub struct Volcanism { @@ -28,7 +28,8 @@ pub enum VolcanismError { FailedToParse(String), } -const VOLCANISM_REGEX: Lazy = Lazy::new(|| Regex::new("(^minor |^major |^)([a-zA-Z ]+) volcanism$").unwrap()); +const VOLCANISM_REGEX: Lazy = + Lazy::new(|| Regex::new("(^minor |^major |^)([a-zA-Z ]+) volcanism$").unwrap()); impl FromStr for Volcanism { type Err = VolcanismError; @@ -36,26 +37,29 @@ impl FromStr for Volcanism { fn from_str(s: &str) -> Result { // TODO I would prefer to move this to a impl FromStr for Option but this is not // possible. Some other way needs to be found. - if s == "" { + if s.is_empty() { return Ok(Volcanism { kind: VolcanismType::None, classification: VolcanismClassification::Normal, - }) + }); } let Some(captures) = VOLCANISM_REGEX.captures(s) else { return Err(VolcanismError::FailedToParse(s.to_string())); }; - let kind = captures.get(2) + let kind = captures + .get(2) .expect("Should have been captured already") .as_str() .parse() - .map_err(|e| VolcanismError::UnknownVolcanismType(e))?; + .map_err(VolcanismError::UnknownVolcanismType)?; - let classification = match captures.get(1) + let classification = match captures + .get(1) .expect("Should have been captured already") - .as_str() { + .as_str() + { "minor " => VolcanismClassification::Minor, "major " => VolcanismClassification::Major, _ => VolcanismClassification::Normal, @@ -72,25 +76,36 @@ from_str_deserialize_impl!(Volcanism); #[cfg(test)] mod tests { - use std::str::FromStr; - use crate::models::journal_event_content::shared::galaxy::volcanism::{Volcanism, VolcanismClassification}; + use crate::models::journal_event_content::shared::galaxy::volcanism::{ + Volcanism, VolcanismClassification, + }; use crate::models::journal_event_content::shared::galaxy::volcanism_type::VolcanismType; + use std::str::FromStr; #[test] fn volcanism_test_cases_are_parsed_correctly() { let test_cases = [ - ("minor silicate vapour geysers volcanism", Volcanism { - kind: VolcanismType::SilicateVapourGeysers, - classification: VolcanismClassification::Minor, - }), - ("major rocky magma volcanism", Volcanism { - kind: VolcanismType::RockyMagma, - classification: VolcanismClassification::Major, - }), - ("minor metallic magma volcanism", Volcanism { - kind: VolcanismType::MetallicMagma, - classification: VolcanismClassification::Minor, - }), + ( + "minor silicate vapour geysers volcanism", + Volcanism { + kind: VolcanismType::SilicateVapourGeysers, + classification: VolcanismClassification::Minor, + }, + ), + ( + "major rocky magma volcanism", + Volcanism { + kind: VolcanismType::RockyMagma, + classification: VolcanismClassification::Major, + }, + ), + ( + "minor metallic magma volcanism", + Volcanism { + kind: VolcanismType::MetallicMagma, + classification: VolcanismClassification::Minor, + }, + ), ]; for (case, expected) in test_cases { diff --git a/ed-journals/src/models/journal_event_content/shared/galaxy/volcanism_type.rs b/ed-journals/src/models/journal_event_content/shared/galaxy/volcanism_type.rs index 1a541db0..2e471088 100644 --- a/ed-journals/src/models/journal_event_content/shared/galaxy/volcanism_type.rs +++ b/ed-journals/src/models/journal_event_content/shared/galaxy/volcanism_type.rs @@ -1,6 +1,6 @@ -use std::str::FromStr; use serde::Deserialize; use serde_json::Value; +use std::str::FromStr; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum VolcanismType { diff --git a/ed-journals/src/models/journal_event_content/shared/materials/material.rs b/ed-journals/src/models/journal_event_content/shared/materials/material.rs index d6e48277..44cca50f 100644 --- a/ed-journals/src/models/journal_event_content/shared/materials/material.rs +++ b/ed-journals/src/models/journal_event_content/shared/materials/material.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::materials::material_category::MaterialCategory; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum Material { diff --git a/ed-journals/src/models/journal_event_content/shared/odyssey/citizen.rs b/ed-journals/src/models/journal_event_content/shared/odyssey/citizen.rs index 87fd2ee7..d39e3fde 100644 --- a/ed-journals/src/models/journal_event_content/shared/odyssey/citizen.rs +++ b/ed-journals/src/models/journal_event_content/shared/odyssey/citizen.rs @@ -8,7 +8,7 @@ pub enum Citizen { #[serde( rename = "assaultsuitai_class1", alias = "assaultsuitai_class2", - alias = "assaultsuitai_class3", + alias = "assaultsuitai_class3" )] Commando, @@ -19,17 +19,14 @@ pub enum Citizen { )] Scout, - #[serde( - rename = "closesuitai_class1", - alias = "closesuitai_class3", - )] + #[serde(rename = "closesuitai_class1", alias = "closesuitai_class3")] Striker, // TODO this is a guess #[serde( rename = "rangedsuitai_class1", alias = "rangedsuitai_class2", - alias = "rangedsuitai_class3", + alias = "rangedsuitai_class3" )] Sniper, } diff --git a/ed-journals/src/models/journal_event_content/shared/odyssey/item_type.rs b/ed-journals/src/models/journal_event_content/shared/odyssey/item_type.rs index 3fd43132..bc1e5af0 100644 --- a/ed-journals/src/models/journal_event_content/shared/odyssey/item_type.rs +++ b/ed-journals/src/models/journal_event_content/shared/odyssey/item_type.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::journal_event_content::shared::odyssey::item::Item; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum ItemType { diff --git a/ed-journals/src/models/journal_event_content/shared/odyssey/suit.rs b/ed-journals/src/models/journal_event_content/shared/odyssey/suit.rs index 53c77f37..2ed7324b 100644 --- a/ed-journals/src/models/journal_event_content/shared/odyssey/suit.rs +++ b/ed-journals/src/models/journal_event_content/shared/odyssey/suit.rs @@ -2,16 +2,10 @@ use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum Suit { - #[serde( - rename = "ExplorationSuit_Class1", - alias = "explorationsuit_class1", - )] + #[serde(rename = "ExplorationSuit_Class1", alias = "explorationsuit_class1")] ArtemisSuit, - #[serde( - rename = "UtilitySuit_Class1", - alias = "utilitysuit_class1", - )] + #[serde(rename = "UtilitySuit_Class1", alias = "utilitysuit_class1")] MaverickSuit, #[cfg(not(feature = "strict"))] diff --git a/ed-journals/src/models/journal_event_content/shared/odyssey/weapon.rs b/ed-journals/src/models/journal_event_content/shared/odyssey/weapon.rs index 2439d191..d9149038 100644 --- a/ed-journals/src/models/journal_event_content/shared/odyssey/weapon.rs +++ b/ed-journals/src/models/journal_event_content/shared/odyssey/weapon.rs @@ -16,7 +16,7 @@ pub enum Weapon { #[serde( alias = "Wpn_M_AssaultRifle_Plasma_FAuto", - alias = "wpn_m_assaultrifle_plasma_fauto", + alias = "wpn_m_assaultrifle_plasma_fauto" )] ManticoreOppressor, @@ -28,13 +28,13 @@ pub enum Weapon { #[serde( alias = "Wpn_M_SubMachineGun_Laser_FAuto", - alias = "wpn_m_submachinegun_laser_fauto", + alias = "wpn_m_submachinegun_laser_fauto" )] TKEclipse, #[serde( alias = "Wpn_M_SubMachineGun_Kinetic_FAuto", - alias = "wpn_m_submachinegun_kinetic_fauto", + alias = "wpn_m_submachinegun_kinetic_fauto" )] KarmaC44, } diff --git a/ed-journals/src/models/journal_event_content/shared/shared_material_category.rs b/ed-journals/src/models/journal_event_content/shared/shared_material_category.rs index 02bdee46..6ccc087a 100644 --- a/ed-journals/src/models/journal_event_content/shared/shared_material_category.rs +++ b/ed-journals/src/models/journal_event_content/shared/shared_material_category.rs @@ -1,7 +1,7 @@ +use crate::journal_event_content::shared::shared_material::SharedMaterial; use crate::models::journal_event_content::shared::materials::material_category::MaterialCategory; use crate::models::journal_event_content::shared::odyssey::item_type::ItemType; use serde::Deserialize; -use crate::journal_event_content::shared::shared_material::SharedMaterial; /// In some cases, the game emits events that refer to materials, but can also contain Odyssey /// items. If that is the case, this model will be used instead. @@ -15,8 +15,12 @@ pub enum SharedMaterialCategory { impl From for SharedMaterialCategory { fn from(value: SharedMaterial) -> Self { match value { - SharedMaterial::ShipMaterial(material) => SharedMaterialCategory::ShipMaterial(material.into()), - SharedMaterial::OdysseyMaterial(item) => SharedMaterialCategory::OdysseyMaterial(item.into()), + SharedMaterial::ShipMaterial(material) => { + SharedMaterialCategory::ShipMaterial(material.into()) + } + SharedMaterial::OdysseyMaterial(item) => { + SharedMaterialCategory::OdysseyMaterial(item.into()) + } } } } diff --git a/ed-journals/src/models/journal_event_content/shared/ship/ship_module.rs b/ed-journals/src/models/journal_event_content/shared/ship/ship_module.rs index b423bb54..55845d5b 100644 --- a/ed-journals/src/models/journal_event_content/shared/ship/ship_module.rs +++ b/ed-journals/src/models/journal_event_content/shared/ship/ship_module.rs @@ -24,7 +24,6 @@ pub enum ShipModule { // #[serde(untagged)] // Armor(ShipArmorModule), - #[serde(untagged)] Cockpit(ShipCockpitModule), diff --git a/ed-journals/src/models/journal_event_content/shared/ship/ship_module/module_class.rs b/ed-journals/src/models/journal_event_content/shared/ship/ship_module/module_class.rs index 9f61a94b..be69f5c1 100644 --- a/ed-journals/src/models/journal_event_content/shared/ship/ship_module/module_class.rs +++ b/ed-journals/src/models/journal_event_content/shared/ship/ship_module/module_class.rs @@ -1,6 +1,6 @@ use thiserror::Error; use crate::models::journal_event_content::shared::ship::ship_module::ship_internal_module::armor_grade::ArmorGrade; -use crate::models::journal_event_content::shared::ship::ship_module::ship_internal_module::armor_module::{ArmorModule, ArmorModuleError}; +use crate::models::journal_event_content::shared::ship::ship_module::ship_internal_module::armor_module::{ArmorModule}; #[derive(Debug, Clone, PartialEq)] pub enum ModuleClass { diff --git a/ed-journals/src/models/journal_event_content/shared/ship/ship_module/ship_hardpoint_module.rs b/ed-journals/src/models/journal_event_content/shared/ship/ship_module/ship_hardpoint_module.rs index b10c0fe8..f067391f 100644 --- a/ed-journals/src/models/journal_event_content/shared/ship/ship_module/ship_hardpoint_module.rs +++ b/ed-journals/src/models/journal_event_content/shared/ship/ship_module/ship_hardpoint_module.rs @@ -104,7 +104,8 @@ impl ShipHardpointModule { .expect("Should have been captured already") .as_str(); - let module_suffix = captures.get(5) + let module_suffix = captures + .get(5) .map(|capture| capture.as_str()) .unwrap_or_default(); diff --git a/ed-journals/src/models/journal_event_content/shared/ship/ship_module/ship_internal_module.rs b/ed-journals/src/models/journal_event_content/shared/ship/ship_module/ship_internal_module.rs index 19ae7a60..581490ac 100644 --- a/ed-journals/src/models/journal_event_content/shared/ship/ship_module/ship_internal_module.rs +++ b/ed-journals/src/models/journal_event_content/shared/ship/ship_module/ship_internal_module.rs @@ -5,15 +5,14 @@ use regex::Regex; use thiserror::Error; use crate::from_str_deserialize_impl; use crate::models::journal_event_content::shared::ship::ship_module::module_class::{ModuleClass, ModuleClassError}; -use crate::models::journal_event_content::shared::ship::ship_module::ship_internal_module::armor_grade::ArmorGrade; use crate::models::journal_event_content::shared::ship::ship_module::ship_internal_module::armor_module::{ArmorModule, ArmorModuleError}; use crate::models::journal_event_content::shared::ship::ship_module::ship_internal_module::internal_module::InternalModule; use crate::models::journal_event_content::shared::ship::ship_module::ship_internal_module::internal_type::InternalType; -pub mod internal_module; -pub mod internal_type; pub mod armor_grade; pub mod armor_module; +pub mod internal_module; +pub mod internal_type; #[derive(Debug, Clone, PartialEq)] pub struct ShipInternalModule { @@ -54,12 +53,14 @@ impl FromStr for ShipInternalModule { let armor_result = ArmorModule::from_str(s); match armor_result { - Ok(armor_module) => return Ok(ShipInternalModule { - size: 1, - class: (&armor_module).into(), - module: InternalModule::Armor(armor_module), - }), - Err(ArmorModuleError::FailedToParse(_)) => {}, + Ok(armor_module) => { + return Ok(ShipInternalModule { + size: 1, + class: (&armor_module).into(), + module: InternalModule::Armor(armor_module), + }) + } + Err(ArmorModuleError::FailedToParse(_)) => {} Err(e) => return Err(e.into()), } @@ -234,7 +235,7 @@ mod tests { size: 1, class: ModuleClass::A, }, - ) + ), ]; for (input, expected) in test_cases { diff --git a/ed-journals/src/models/journal_event_content/shared/ship/ship_slot.rs b/ed-journals/src/models/journal_event_content/shared/ship/ship_slot.rs index ecf055eb..671eb764 100644 --- a/ed-journals/src/models/journal_event_content/shared/ship/ship_slot.rs +++ b/ed-journals/src/models/journal_event_content/shared/ship/ship_slot.rs @@ -111,7 +111,8 @@ impl FromStr for ShipSlot { } if let Some(captures) = MILITARY_REGEX.captures(s) { - let slot_nr = captures.get(1) + let slot_nr = captures + .get(1) .expect("Should have been captured already") .as_str() .parse() @@ -120,7 +121,7 @@ impl FromStr for ShipSlot { return Ok(ShipSlot { slot_nr, kind: SkipSlotKind::Military, - }) + }); } if let Ok(core_slot) = s.parse() { diff --git a/ed-journals/src/models/journal_event_content/shared/station/mission_type.rs b/ed-journals/src/models/journal_event_content/shared/station/mission_type.rs index 15aa7e0b..4635e480 100644 --- a/ed-journals/src/models/journal_event_content/shared/station/mission_type.rs +++ b/ed-journals/src/models/journal_event_content/shared/station/mission_type.rs @@ -5,10 +5,7 @@ use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] pub enum MissionType { - #[serde( - alias = "Mission_Salvage", - alias = "Mission_Salvage_name", - )] + #[serde(alias = "Mission_Salvage", alias = "Mission_Salvage_name")] BlackBoxSalvageOperation, // TODO replace with specific struct, as this is currently incorrect @@ -24,7 +21,7 @@ pub enum MissionType { alias = "Mission_Courier_Expansion", alias = "Mission_Courier_Expansion_name", alias = "Mission_Courier_Outbreak", - alias = "Mission_Courier_Outbreak_name", + alias = "Mission_Courier_Outbreak_name" )] DataCourier, @@ -43,7 +40,7 @@ pub enum MissionType { alias = "Mission_AltruismCredits_Bust", alias = "Mission_AltruismCredits_Bust_name", alias = "Mission_AltruismCredits_Outbreak", - alias = "Mission_AltruismCredits_Outbreak_name", + alias = "Mission_AltruismCredits_Outbreak_name" )] DonationMission, @@ -59,7 +56,7 @@ pub enum MissionType { alias = "Mission_OnFoot_Onslaught_MB", alias = "Mission_OnFoot_Onslaught_MB_name", alias = "Mission_OnFoot_Onslaught_Offline_MB", - alias = "Mission_OnFoot_Onslaught_Offline_MB_name", + alias = "Mission_OnFoot_Onslaught_Offline_MB_name" )] OnFootMassacreMission, @@ -67,13 +64,13 @@ pub enum MissionType { alias = "Mission_OnFoot_Assassination_MB", alias = "Mission_OnFoot_Assassination_MB_name", alias = "Mission_Assassinate_Planetary", - alias = "Mission_Assassinate_Planetary_name", + alias = "Mission_Assassinate_Planetary_name" )] OnFootAssassinationMission, #[serde( alias = "Mission_Assassinate_Legal_Corporate", - alias = "Mission_Assassinate_Legal_Corporate_name", + alias = "Mission_Assassinate_Legal_Corporate_name" )] OnFootLegalAssassinationMission, @@ -84,7 +81,7 @@ pub enum MissionType { alias = "Mission_OnFoot_Sabotage_Production_002", alias = "Mission_OnFoot_Sabotage_Production_002_name", alias = "Mission_OnFoot_Sabotage_Production_Covert_001", - alias = "Mission_OnFoot_Sabotage_Production_Covert_001_name", + alias = "Mission_OnFoot_Sabotage_Production_Covert_001_name" )] OnFootDisruptionMission, @@ -94,15 +91,12 @@ pub enum MissionType { #[serde(alias = "Mission_Sightseeing", alias = "Mission_Sightseeing_name")] UnspecifiedSightseeingMission, - #[serde( - alias = "Mission_HackMegaship", - alias = "Mission_HackMegaship_name", - )] + #[serde(alias = "Mission_HackMegaship", alias = "Mission_HackMegaship_name")] HackingMission, #[serde( alias = "Mission_Courier_Engineer", - alias = "Mission_Courier_Engineer_name", + alias = "Mission_Courier_Engineer_name" )] EngineerInvitationMission, @@ -116,19 +110,19 @@ pub enum MissionType { #[serde( alias = "Mission_OnFoot_Salvage_MB", - alias = "Mission_OnFoot_Salvage_MB_name", + alias = "Mission_OnFoot_Salvage_MB_name" )] OnFootSalvageMission, #[serde( alias = "Mission_OnFoot_Collect_002", - alias = "Mission_OnFoot_Collect_002_name", + alias = "Mission_OnFoot_Collect_002_name" )] OnFootCollectionMission, #[serde( alias = "Mission_OnFoot_Heist_POI_002", - alias = "Mission_OnFoot_Heist_POI_002_name", + alias = "Mission_OnFoot_Heist_POI_002_name" )] OnFootHeistMission, @@ -136,7 +130,7 @@ pub enum MissionType { alias = "Mission_OnFoot_Hack_Download_007", alias = "Mission_OnFoot_Hack_Download_007_name", alias = "Mission_OnFoot_Hack_Download_Covert_007", - alias = "Mission_OnFoot_Hack_Download_Covert_007_name", + alias = "Mission_OnFoot_Hack_Download_Covert_007_name" )] OnFootHackingMission, diff --git a/ed-journals/src/models/journal_event_content/ship_targeted_event.rs b/ed-journals/src/models/journal_event_content/ship_targeted_event.rs index 1e696e09..958cb23c 100644 --- a/ed-journals/src/models/journal_event_content/ship_targeted_event.rs +++ b/ed-journals/src/models/journal_event_content/ship_targeted_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::ship::ship_type::ShipType; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/srv_destroyed_event.rs b/ed-journals/src/models/journal_event_content/srv_destroyed_event.rs index 2df74144..9e8a34eb 100644 --- a/ed-journals/src/models/journal_event_content/srv_destroyed_event.rs +++ b/ed-journals/src/models/journal_event_content/srv_destroyed_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::ship::srv_type::SRVType; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_event_content/supercruise_exit_event.rs b/ed-journals/src/models/journal_event_content/supercruise_exit_event.rs index 5188fc2e..90d3497d 100644 --- a/ed-journals/src/models/journal_event_content/supercruise_exit_event.rs +++ b/ed-journals/src/models/journal_event_content/supercruise_exit_event.rs @@ -1,5 +1,5 @@ -use serde::Deserialize; use crate::models::journal_event_content::shared::galaxy::body_type::BodyType; +use serde::Deserialize; #[derive(Debug, Deserialize, Clone, PartialEq)] #[serde(rename_all = "PascalCase")] diff --git a/ed-journals/src/models/journal_file.rs b/ed-journals/src/models/journal_file.rs index 92de91db..6dc1b40b 100644 --- a/ed-journals/src/models/journal_file.rs +++ b/ed-journals/src/models/journal_file.rs @@ -1,11 +1,11 @@ -use std::cmp::Ordering; use chrono::NaiveDateTime; use once_cell::sync::Lazy; use regex::Regex; +use std::cmp::Ordering; use std::fs::{DirEntry, File}; use std::io; use std::num::ParseIntError; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use crate::models::journal_reader::JournalReader; use thiserror::Error; @@ -111,7 +111,8 @@ impl PartialOrd for JournalFile { impl Ord for JournalFile { fn cmp(&self, other: &Self) -> Ordering { - self.naive_date_time.cmp(&other.naive_date_time) + self.naive_date_time + .cmp(&other.naive_date_time) .then(self.part.cmp(&other.part)) } } diff --git a/ed-journals/src/models/journal_reader.rs b/ed-journals/src/models/journal_reader.rs index 6c2f7849..8e143ed4 100644 --- a/ed-journals/src/models/journal_reader.rs +++ b/ed-journals/src/models/journal_reader.rs @@ -1,12 +1,11 @@ -use std::{io, mem}; use std::collections::VecDeque; -use std::io::{Read, Seek, SeekFrom, Write}; +use std::io::{Read, Seek, SeekFrom}; use std::string::FromUtf8Error; +use std::{io, mem}; use thiserror::Error; use crate::models::journal_event::JournalEvent; -use crate::JournalFile; /// Used for reading entries from a journal log file. The reader takes care of things like partial /// lines if that ever happens and parsing them to a usable [JournalEvent]. @@ -45,7 +44,8 @@ use crate::JournalFile; /// ``` #[derive(Debug)] pub struct JournalReader - where T : Read + Seek +where + T: Read + Seek, { source: T, position: usize, @@ -66,22 +66,21 @@ pub enum JournalReaderError { } impl JournalReader - where T : Read + Seek +where + T: Read + Seek, { fn read_next(&mut self) -> Result<(), JournalReaderError> { self.source.seek(SeekFrom::Start(self.position as u64))?; self.position += self.source.read_to_string(&mut self.file_read_buffer)?; - let mut lines = self.file_read_buffer - .lines() - .peekable(); + let mut lines = self.file_read_buffer.lines().peekable(); loop { let Some(line) = lines.next() else { break; }; - if let None = lines.peek() { + if lines.peek().is_none() { if self.file_read_buffer == line { break; } @@ -112,7 +111,8 @@ impl JournalReader } impl From for JournalReader - where T : Read + Seek +where + T: Read + Seek, { fn from(value: T) -> Self { JournalReader { @@ -125,7 +125,8 @@ impl From for JournalReader } impl Iterator for JournalReader - where T : Read + Seek +where + T: Read + Seek, { type Item = Result; @@ -147,62 +148,70 @@ mod tests { use chrono::{TimeZone, Utc}; use crate::models::journal_event::JournalEvent; - use crate::models::journal_event_content::{JournalEventContent, JournalEventContentKind}; use crate::models::journal_event_content::commander_event::CommanderEvent; use crate::models::journal_event_content::file_header_event::FileHeaderEvent; + use crate::models::journal_event_content::{JournalEventContent, JournalEventContentKind}; use crate::models::journal_reader::JournalReader; #[test] fn journal_events_are_read_in_the_correct_order() { - let test_journal_contents = include_str!("../../test-files/Journal.2022-10-22T171117.01.log"); + let test_journal_contents = + include_str!("../../test-files/Journal.2022-10-22T171117.01.log"); let cursor = Cursor::new(test_journal_contents); let mut reader = JournalReader::from(cursor); - let result = reader.next() + let result = reader + .next() .expect("Should be filled") .expect("Should not be an error"); - assert_eq!(result, JournalEvent { - timestamp: Utc.with_ymd_and_hms(2022, 10, 22, 15, 10, 41) - .unwrap(), // 2022-10-22T15:10:41Z - content: JournalEventContent::FileHeader(FileHeaderEvent { - part: 1, - language: "English/UK".to_string(), - odyssey: true, - game_version: "4.0.0.1450".to_string(), - build: "r286858/r0 ".to_string(), - }), - }); - - let result = reader.next() + assert_eq!( + result, + JournalEvent { + timestamp: Utc.with_ymd_and_hms(2022, 10, 22, 15, 10, 41).unwrap(), // 2022-10-22T15:10:41Z + content: JournalEventContent::FileHeader(FileHeaderEvent { + part: 1, + language: "English/UK".to_string(), + odyssey: true, + game_version: "4.0.0.1450".to_string(), + build: "r286858/r0 ".to_string(), + }), + } + ); + + let result = reader + .next() .expect("Should be filled") .expect("Should not be an error"); - assert_eq!(result, JournalEvent { - timestamp: Utc.with_ymd_and_hms(2022, 10, 22, 15, 12, 05) - .unwrap(), // 2022-10-22T15:12:05Z - content: JournalEventContent::Commander(CommanderEvent { - fid: "F123456789".to_string(), - name: "TEST".to_string(), - }), - }); + assert_eq!( + result, + JournalEvent { + timestamp: Utc.with_ymd_and_hms(2022, 10, 22, 15, 12, 05).unwrap(), // 2022-10-22T15:12:05Z + content: JournalEventContent::Commander(CommanderEvent { + fid: "F123456789".to_string(), + name: "TEST".to_string(), + }), + } + ); } #[test] fn partial_lines_are_read_correctly() { - fs::write("a.tmp", "") - .unwrap(); + fs::write("a.tmp", "").unwrap(); - let file = File::open("a.tmp") - .unwrap(); + let file = File::open("a.tmp").unwrap(); let mut reader = JournalReader::from(file); assert!(reader.next().is_none()); - fs::write("a.tmp", r#"{"timestamp":"2022-10-22T15:10:41Z","event":"Fileheader","part":1,"#) - .unwrap(); + fs::write( + "a.tmp", + r#"{"timestamp":"2022-10-22T15:10:41Z","event":"Fileheader","part":1,"#, + ) + .unwrap(); assert!(reader.next().is_none()); @@ -210,8 +219,14 @@ mod tests { {"timestamp":"2022-10-22T15:12:05Z","event":"Commander","FID":"F123456789","Name":"TEST"}"#) .unwrap(); - assert_eq!(reader.next().unwrap().unwrap().content.kind(), JournalEventContentKind::FileHeader); - assert_eq!(reader.next().unwrap().unwrap().content.kind(), JournalEventContentKind::Commander); + assert_eq!( + reader.next().unwrap().unwrap().content.kind(), + JournalEventContentKind::FileHeader + ); + assert_eq!( + reader.next().unwrap().unwrap().content.kind(), + JournalEventContentKind::Commander + ); fs::remove_file("a.tmp").unwrap(); }