Skip to main content

esi_openapi/groups/
skills.rs

1use crate::prelude::*;
2
3/// Endpoints for Skills
4pub struct SkillsGroup<'a> {
5    pub(crate) esi: &'a Esi,
6}
7
8#[derive(Debug, Deserialize)]
9#[allow(missing_docs)]
10pub struct Skill {
11    pub skill_id: i64,
12    pub active_skill_level: i64,
13    pub skillpoints_in_skill: i64,
14    pub trained_skill_level: i64,
15}
16
17#[derive(Debug, Deserialize)]
18#[allow(missing_docs)]
19pub struct Skills {
20    pub skills: Vec<Skill>,
21    pub total_sp: i64,
22    pub unallocated_sp: Option<i64>,
23}
24
25impl SkillsGroup<'_> {
26    api_get!(
27        /// Get character skills.
28        get_skills,
29        "GetCharactersCharacterIdSkills",
30        RequestType::Authenticated,
31        Skills,
32        (character_id: i64) => "{character_id}"
33    );
34}
35
36/// A character's attributes and remap information.
37#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
38#[allow(missing_docs)]
39pub struct CharacterAttributes {
40    pub accrued_remap_cooldown_date: Option<String>,
41    pub bonus_remaps: Option<i64>,
42    pub charisma: i64,
43    pub intelligence: i64,
44    pub last_remap_date: Option<String>,
45    pub memory: i64,
46    pub perception: i64,
47    pub willpower: i64,
48}
49
50/// An entry of a character's skill queue.
51#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
52#[allow(missing_docs)]
53pub struct SkillQueueItem {
54    pub finish_date: Option<String>,
55    pub finished_level: i64,
56    pub level_end_sp: Option<i64>,
57    pub level_start_sp: Option<i64>,
58    pub queue_position: i64,
59    pub skill_id: i64,
60    pub start_date: Option<String>,
61    pub training_start_sp: Option<i64>,
62}
63
64impl SkillsGroup<'_> {
65    api_get!(
66        /// Get a character's attributes.
67        get_attributes,
68        "GetCharactersCharacterIdAttributes",
69        RequestType::Authenticated,
70        CharacterAttributes,
71        (character_id: i64) => "{character_id}"
72    );
73
74    api_get!(
75        /// Get a character's skill queue.
76        get_skillqueue,
77        "GetCharactersCharacterIdSkillqueue",
78        RequestType::Authenticated,
79        Vec<SkillQueueItem>,
80        (character_id: i64) => "{character_id}"
81    );
82}
83
84#[cfg(test)]
85mod character_basic_tests {
86    use super::SkillQueueItem;
87
88    #[test]
89    fn test_parse_paused_queue_entry() {
90        let json = r#"[{"finished_level": 5, "queue_position": 0, "skill_id": 3300}]"#;
91        let queue: Vec<SkillQueueItem> = serde_json::from_str(json).unwrap();
92        assert!(queue[0].finish_date.is_none());
93        assert_eq!(queue[0].skill_id, 3300);
94    }
95}