From 2c5b7da8165e3f8b90748e8ced1de0e3e8d52309 Mon Sep 17 00:00:00 2001 From: lazydancer Date: Sun, 22 Dec 2024 17:33:11 -0500 Subject: Initial --- rust_backend/src/pathfinding/models.rs | 86 ++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 rust_backend/src/pathfinding/models.rs (limited to 'rust_backend/src/pathfinding/models.rs') diff --git a/rust_backend/src/pathfinding/models.rs b/rust_backend/src/pathfinding/models.rs new file mode 100644 index 0000000..4bbc580 --- /dev/null +++ b/rust_backend/src/pathfinding/models.rs @@ -0,0 +1,86 @@ +use serde::{Deserialize, Deserializer, Serialize}; +use std::str::FromStr; +use std::collections::HashMap; + + +#[derive(Deserialize, Serialize, Clone)] +pub struct Location { + pub solar_system_id: i32, + pub station_id: Option, + pub structure_id: Option, +} + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub struct RawNode { + pub itemID: u64, + pub typeID: u64, + pub groupID: u64, + #[serde(deserialize_with = "deserialize_optional_u64")] + pub solarSystemID: Option, + #[serde(deserialize_with = "deserialize_optional_u64")] + pub constellationID: Option, + #[serde(deserialize_with = "deserialize_optional_u64")] + pub regionID: Option, + #[serde(deserialize_with = "deserialize_optional_u64")] + pub orbitID: Option, + pub x: Option, + pub y: Option, + pub z: Option, + #[serde(deserialize_with = "deserialize_optional_f64")] + pub radius: Option, + pub itemName: Option, + #[serde(deserialize_with = "deserialize_optional_f64")] + pub security: Option, +} + + +fn deserialize_optional_u64<'de, D>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + let s: Option = Option::deserialize(deserializer)?; + match s.as_deref() { + Some("None") | Some("") => Ok(None), // Handle "None" and empty strings + Some(str_val) => u64::from_str(str_val) + .map(Some) + .map_err(serde::de::Error::custom), + None => Ok(None), + } +} + +fn deserialize_optional_f64<'de, D>(deserializer: D) -> Result, D::Error> +where + D: Deserializer<'de>, +{ + let s: Option = Option::deserialize(deserializer)?; + match s.as_deref() { + Some("None") | Some("") => Ok(None), // Handle "None" and empty strings + Some(str_val) => str_val.parse::() + .map(Some) + .map_err(serde::de::Error::custom), + None => Ok(None), + } +} + +#[derive(Debug)] +pub struct MapNode { + pub item_id: u64, + pub is_station: bool, + pub solar_system_id: u64, + pub region_id: u64, + pub x: f64, + pub y: f64, + pub z: f64, + pub name: String, + pub security: f64, +} + +#[derive(Deserialize, Serialize, Clone, Debug)] +pub struct Connection { + stargate_id: u64, + destination_id: u64, +} + + + +pub type Graph = HashMap>; \ No newline at end of file -- cgit v1.3