use serde_derive::{Deserialize, Serialize}; use serde_with::{serde_as, DisplayFromStr}; use std::collections::BTreeMap; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename = "Stationpedia", deny_unknown_fields)] pub struct Stationpedia { pub pages: Vec, pub reagents: BTreeMap, #[serde(rename = "scriptCommands")] pub script_commands: BTreeMap, } #[allow(dead_code)] impl Stationpedia { pub fn lookup_prefab_name(&self, prefab_name: &'_ str) -> Option<&Page> { self.pages.iter().find(|p| p.prefab_name == prefab_name) } pub fn lookup_key(&self, key: &str) -> Option<&Page> { self.pages.iter().find(|p| p.key == key) } pub fn lookup_hash(&self, hash: i32) -> Option<&Page> { self.pages.iter().find(|p| p.prefab_hash == hash) } } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct Reagent { #[serde(rename = "Hash")] pub hash: i64, #[serde(rename = "Unit")] pub unit: String, #[serde(rename = "Sources")] pub sources: Option>, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct Command { pub desc: String, pub example: String, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Page { #[serde(rename = "ConnectionInsert")] pub connection_insert: Vec, #[serde(rename = "ConstructedByKits")] pub constructs: Vec, #[serde(rename = "Description")] pub description: String, #[serde(rename = "Device")] pub device: Option, #[serde(rename = "Item")] pub item: Option, #[serde(rename = "Structure")] pub structure: Option, #[serde(rename = "Key")] pub key: String, #[serde(rename = "LogicInfo")] pub logic_info: Option, #[serde(rename = "LogicInsert")] pub logic_insert: Vec, #[serde(rename = "LogicSlotInsert")] pub logic_slot_insert: Vec, #[serde(rename = "Memory")] pub memory: Option, #[serde(rename = "ModeInsert")] pub mode_insert: Vec, #[serde(rename = "PrefabHash")] pub prefab_hash: i32, #[serde(rename = "PrefabName")] pub prefab_name: String, #[serde(rename = "SlotInserts")] pub slot_inserts: Vec, #[serde(rename = "Title")] pub title: String, #[serde(rename = "TransmissionReceiver")] pub transmission_receiver: Option, #[serde(rename = "WirelessLogic")] pub wireless_logic: Option, #[serde(rename = "CircuitHolder")] pub circuit_holder: Option, #[serde(rename = "BasePowerDraw")] pub base_power_draw: Option, #[serde(rename = "MaxPressure")] pub max_pressure: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct Constructs { #[serde(rename = "NameOfThing")] pub name_of_thing: String, #[serde(rename = "PageLink")] pub page_link: String, #[serde(rename = "PrefabHash")] pub prefab_hash: i32, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct Structure { #[serde(rename = "SmallGrid")] pub small_grid: bool, #[serde(rename = "BuildStates")] pub build_states: BuildStates, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct BuildStates(pub Vec); #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct BuildState { #[serde(rename = "Tool")] pub tool: Option>, #[serde(rename = "ToolExit")] pub tool_exit: Option>, #[serde(rename = "CanManufacture", default)] pub can_manufacture: bool, #[serde(rename = "MachineTier")] pub machine_tier: Option, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub enum MachineTier { Undefined, TierOne, TierTwo, TierThree, Max, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct Tool { #[serde(rename = "IsTool", default)] pub is_tool: bool, #[serde(rename = "PrefabName")] pub prefab_name: String, #[serde(rename = "Quantity")] pub quantity: Option, } #[serde_as] #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct SlotInsert { #[serde(rename = "SlotIndex")] #[serde_as(as = "DisplayFromStr")] pub slot_index: u32, #[serde(rename = "SlotName")] pub slot_name: String, #[serde(rename = "SlotType")] pub slot_type: String, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct LogicInsert { #[serde(rename = "LogicAccessTypes")] pub logic_access_types: String, #[serde(rename = "LogicName")] pub logic_name: String, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct LogicSlotInsert { #[serde(rename = "LogicAccessTypes")] pub logic_access_types: String, #[serde(rename = "LogicName")] pub logic_name: String, } #[serde_as] #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct ModeInsert { #[serde(rename = "LogicAccessTypes")] #[serde_as(as = "DisplayFromStr")] pub logic_access_types: u32, #[serde(rename = "LogicName")] pub logic_name: String, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct ConnectionInsert { #[serde(rename = "LogicAccessTypes")] pub logic_access_types: String, #[serde(rename = "LogicName")] pub logic_name: String, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct LogicInfo { #[serde(rename = "LogicSlotTypes")] pub logic_slot_types: BTreeMap, #[serde(rename = "LogicTypes")] pub logic_types: LogicTypes, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct LogicSlotTypes { #[serde(flatten)] pub slot_types: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct LogicTypes { #[serde(flatten)] pub types: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct Memory { #[serde(rename = "Instructions")] pub instructions: Option>, #[serde(rename = "MemoryAccess")] pub memory_access: String, #[serde(rename = "MemorySize")] pub memory_size: i64, #[serde(rename = "MemorySizeReadable")] pub memory_size_readable: String, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct Instruction { #[serde(rename = "Description")] pub description: String, #[serde(rename = "Type")] pub type_: String, #[serde(rename = "Value")] pub value: i64, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Item { #[serde(rename = "Consumable")] pub consumable: Option, #[serde(rename = "FilterType")] pub filter_type: Option, #[serde(rename = "Ingredient")] pub ingredient: Option, #[serde(rename = "MaxQuantity")] pub max_quantity: Option, #[serde(rename = "Reagents")] pub reagents: Option>, #[serde(rename = "SlotClass")] pub slot_class: String, #[serde(rename = "SortingClass")] pub sorting_class: String, #[serde(rename = "Recipes", default)] pub recipes: Vec, } #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Recipe { #[serde(rename = "CreatorPrefabName")] pub creator_prefab_name: String, #[serde(rename = "TierName")] pub tier_name: String, #[serde(rename = "Time")] pub time: f64, #[serde(rename = "Energy")] pub energy: f64, #[serde(rename = "Temperature")] pub temperature: RecipeTemperature, #[serde(rename = "Pressure")] pub pressure: RecipePressure, #[serde(rename = "RequiredMix")] pub required_mix: RecipeGasMix, #[serde(rename = "CountTypes")] pub count_types: i64, #[serde(flatten)] pub reagents: indexmap::IndexMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct RecipeTemperature { #[serde(rename = "Start")] pub start: f64, #[serde(rename = "Stop")] pub stop: f64, #[serde(rename = "IsValid")] pub is_valid: bool, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct RecipePressure { #[serde(rename = "Start")] pub start: f64, #[serde(rename = "Stop")] pub stop: f64, #[serde(rename = "IsValid")] pub is_valid: bool, } #[derive(Clone, Debug, PartialEq, PartialOrd, Serialize, Deserialize)] pub struct RecipeGasMix { #[serde(rename = "Rule")] pub rule: i64, #[serde(rename = "IsAny")] pub is_any: bool, #[serde(rename = "IsAnyToRemove")] pub is_any_to_remove: bool, #[serde(flatten)] pub reagents: BTreeMap, } #[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord, Hash, Serialize, Deserialize)] pub struct Device { #[serde(rename = "ConnectionList")] pub connection_list: Vec<(String, String)>, #[serde(rename = "DevicesLength")] pub devices_length: Option, #[serde(rename = "HasActivateState")] pub has_activate_state: bool, #[serde(rename = "HasAtmosphere")] pub has_atmosphere: bool, #[serde(rename = "HasColorState")] pub has_color_state: bool, #[serde(rename = "HasLockState")] pub has_lock_state: bool, #[serde(rename = "HasModeState")] pub has_mode_state: bool, #[serde(rename = "HasOnOffState")] pub has_on_off_state: bool, #[serde(rename = "HasOpenState")] pub has_open_state: bool, #[serde(rename = "HasReagents")] pub has_reagents: bool, }