Skip to main content

esi_openapi/groups/
dogma.rs

1use crate::prelude::*;
2
3/// Endpoints for Dogma
4pub struct DogmaGroup<'a> {
5    pub(crate) esi: &'a Esi,
6}
7
8/// Information about a dogma attribute.
9#[derive(Debug, Clone, PartialEq, Deserialize)]
10#[allow(missing_docs)]
11pub struct DogmaAttribute {
12    pub attribute_id: i64,
13    pub default_value: Option<f64>,
14    pub description: Option<String>,
15    pub display_name: Option<String>,
16    pub high_is_good: Option<bool>,
17    pub icon_id: Option<i64>,
18    pub name: Option<String>,
19    pub published: Option<bool>,
20    pub stackable: Option<bool>,
21    pub unit_id: Option<i64>,
22}
23
24/// A modifier applied by a dogma effect.
25#[derive(Debug, Clone, PartialEq, Deserialize)]
26#[allow(missing_docs)]
27pub struct DogmaEffectModifier {
28    pub domain: Option<String>,
29    pub effect_id: Option<i64>,
30    pub func: String,
31    pub modified_attribute_id: Option<i64>,
32    pub modifying_attribute_id: Option<i64>,
33    pub operator: Option<i64>,
34}
35
36/// Information about a dogma effect.
37#[derive(Debug, Clone, PartialEq, Deserialize)]
38#[allow(missing_docs)]
39pub struct DogmaEffect {
40    pub description: Option<String>,
41    pub disallow_auto_repeat: Option<bool>,
42    pub discharge_attribute_id: Option<i64>,
43    pub display_name: Option<String>,
44    pub duration_attribute_id: Option<i64>,
45    pub effect_category: Option<i64>,
46    pub effect_id: i64,
47    pub electronic_chance: Option<bool>,
48    pub falloff_attribute_id: Option<i64>,
49    pub icon_id: Option<i64>,
50    pub is_assistance: Option<bool>,
51    pub is_offensive: Option<bool>,
52    pub is_warp_safe: Option<bool>,
53    pub modifiers: Option<Vec<DogmaEffectModifier>>,
54    pub name: Option<String>,
55    pub post_expression: Option<i64>,
56    pub pre_expression: Option<i64>,
57    pub published: Option<bool>,
58    pub range_attribute_id: Option<i64>,
59    pub range_chance: Option<bool>,
60    pub tracking_speed_attribute_id: Option<i64>,
61}
62
63/// An attribute value of a dynamic (mutated) item.
64#[derive(Debug, Clone, PartialEq, Deserialize)]
65#[allow(missing_docs)]
66pub struct DynamicItemAttribute {
67    pub attribute_id: i64,
68    pub value: f64,
69}
70
71/// An effect of a dynamic (mutated) item.
72#[derive(Debug, Clone, PartialEq, Deserialize)]
73#[allow(missing_docs)]
74pub struct DynamicItemEffect {
75    pub effect_id: i64,
76    pub is_default: bool,
77}
78
79/// Dynamic (mutated) item information.
80#[derive(Debug, Clone, PartialEq, Deserialize)]
81#[allow(missing_docs)]
82pub struct DynamicItem {
83    /// Character ID of the creator.
84    pub created_by: i64,
85    pub dogma_attributes: Vec<DynamicItemAttribute>,
86    pub dogma_effects: Vec<DynamicItemEffect>,
87    pub mutator_type_id: i64,
88    pub source_type_id: i64,
89}
90
91impl DogmaGroup<'_> {
92    api_get!(
93        /// List the IDs of all dogma attributes.
94        get_attributes,
95        "GetDogmaAttributes",
96        RequestType::Public,
97        Vec<i64>,
98    );
99
100    api_get!(
101        /// Get information about a dogma attribute.
102        get_attribute,
103        "GetDogmaAttributesAttributeId",
104        RequestType::Public,
105        DogmaAttribute,
106        (attribute_id: i64) => "{attribute_id}"
107    );
108
109    api_get!(
110        /// Get information about a dynamic (mutated) item.
111        get_dynamic_item,
112        "GetDogmaDynamicItemsTypeIdItemId",
113        RequestType::Public,
114        DynamicItem,
115        (type_id: i64) => "{type_id}",
116        (item_id: i64) => "{item_id}"
117    );
118
119    api_get!(
120        /// List the IDs of all dogma effects.
121        get_effects,
122        "GetDogmaEffects",
123        RequestType::Public,
124        Vec<i64>,
125    );
126
127    api_get!(
128        /// Get information about a dogma effect.
129        get_effect,
130        "GetDogmaEffectsEffectId",
131        RequestType::Public,
132        DogmaEffect,
133        (effect_id: i64) => "{effect_id}"
134    );
135}
136
137#[cfg(test)]
138mod tests {
139    use super::{DogmaEffect, DynamicItem};
140
141    #[test]
142    fn test_parse_dynamic_item() {
143        let json = r#"{
144            "created_by": 2112000000,
145            "dogma_attributes": [{"attribute_id": 9, "value": 1.5}],
146            "dogma_effects": [{"effect_id": 11, "is_default": true}],
147            "mutator_type_id": 49730,
148            "source_type_id": 2048
149        }"#;
150        let item: DynamicItem = serde_json::from_str(json).unwrap();
151        assert_eq!(item.created_by, 2_112_000_000);
152        assert!(item.dogma_effects[0].is_default);
153    }
154
155    #[test]
156    fn test_parse_effect_with_only_required_fields() {
157        let effect: DogmaEffect = serde_json::from_str(r#"{"effect_id": 11}"#).unwrap();
158        assert_eq!(effect.effect_id, 11);
159        assert!(effect.modifiers.is_none());
160    }
161}