use serde::Deserialize; use serde_repr::*; #[allow(non_snake_case)] #[derive(Deserialize, Debug)] pub struct Type { pub groupID: i32, pub categoryID: i32, pub capacity: Option, pub mass: Option, pub radius: Option, pub volume: Option, } #[allow(non_snake_case)] #[derive(Deserialize, Debug)] pub struct TypeDogmaAttribute { pub attributeID: i32, pub value: f64, } #[allow(non_snake_case, dead_code)] #[derive(Deserialize, Debug)] pub struct TypeDogmaEffect { pub effectID: i32, pub isDefault: bool, } #[allow(non_snake_case)] #[derive(Deserialize, Debug)] pub struct DogmaAttribute { pub defaultValue: f64, pub highIsGood: bool, pub stackable: bool, } #[allow(non_snake_case)] #[derive(Deserialize_repr, Debug)] #[repr(i32)] pub enum DogmaEffectModifierInfoDomain { ItemID = 0, ShipID = 1, CharID = 2, OtherID = 3, StructureID = 4, Target = 5, TargetID = 6, } #[allow(non_snake_case)] #[derive(Deserialize_repr, Debug)] #[repr(i32)] pub enum DogmaEffectModifierInfoFunc { ItemModifier = 0, LocationGroupModifier = 1, LocationModifier = 2, LocationRequiredSkillModifier = 3, OwnerRequiredSkillModifier = 4, EffectStopper = 5, } #[allow(non_snake_case)] #[derive(Deserialize, Debug)] pub struct DogmaEffectModifierInfo { pub domain: DogmaEffectModifierInfoDomain, pub func: DogmaEffectModifierInfoFunc, pub modifiedAttributeID: Option, pub modifyingAttributeID: Option, pub operation: Option, pub groupID: Option, pub skillTypeID: Option, } #[allow(non_snake_case, dead_code)] #[derive(Deserialize, Debug)] pub struct DogmaEffect { pub dischargeAttributeID: Option, pub durationAttributeID: Option, pub effectCategory: i32, pub electronicChance: bool, pub isAssistance: bool, pub isOffensive: bool, pub isWarpSafe: bool, pub propulsionChance: bool, pub rangeChance: bool, pub rangeAttributeID: Option, pub falloffAttributeID: Option, pub trackingSpeedAttributeID: Option, pub fittingUsageChanceAttributeID: Option, pub resistanceAttributeID: Option, pub modifierInfo: Vec, } #[derive(Deserialize, Debug)] pub enum EsfState { Passive, Online, Active, Overload, } #[derive(Deserialize, Debug, Eq, Hash, PartialEq)] pub enum EsfSlotType { High, Medium, Low, Rig, SubSystem, Service, } #[derive(Deserialize, Debug)] pub struct EsfCharge { pub type_id: i32, } #[derive(Deserialize, Debug)] pub struct EsfSlot { pub r#type: EsfSlotType, pub index: i32, } #[derive(Deserialize, Debug)] pub struct EsfModule { pub type_id: i32, pub slot: EsfSlot, pub state: EsfState, pub charge: Option, } #[derive(Deserialize, Debug)] pub struct EsfDrone { pub type_id: i32, pub state: EsfState, } #[derive(Deserialize, Debug)] pub struct EsfFit { pub ship_type_id: i32, pub modules: Vec, pub drones: Vec, } impl From for DogmaEffectModifierInfoDomain { fn from(value: i32) -> DogmaEffectModifierInfoDomain { match value { 0 => DogmaEffectModifierInfoDomain::ItemID, 1 => DogmaEffectModifierInfoDomain::ShipID, 2 => DogmaEffectModifierInfoDomain::CharID, 3 => DogmaEffectModifierInfoDomain::OtherID, 4 => DogmaEffectModifierInfoDomain::StructureID, 5 => DogmaEffectModifierInfoDomain::Target, 6 => DogmaEffectModifierInfoDomain::TargetID, _ => DogmaEffectModifierInfoDomain::ItemID, } } } impl From for DogmaEffectModifierInfoFunc { fn from(value: i32) -> DogmaEffectModifierInfoFunc { match value { 0 => DogmaEffectModifierInfoFunc::ItemModifier, 1 => DogmaEffectModifierInfoFunc::LocationGroupModifier, 2 => DogmaEffectModifierInfoFunc::LocationModifier, 3 => DogmaEffectModifierInfoFunc::LocationRequiredSkillModifier, 4 => DogmaEffectModifierInfoFunc::OwnerRequiredSkillModifier, 5 => DogmaEffectModifierInfoFunc::EffectStopper, _ => DogmaEffectModifierInfoFunc::ItemModifier, } } }