Skip to main content

esi_openapi/groups/
access_list.rs

1use crate::prelude::*;
2
3/// Endpoints for Access List
4pub struct AccessListGroup<'a> {
5    pub(crate) esi: &'a Esi,
6}
7
8/// A reference to an access list.
9#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
10pub struct AccessListSummary {
11    /// ID of the access list.
12    pub id: i64,
13}
14
15#[derive(Debug, Deserialize)]
16struct AccessLists {
17    access_lists: Vec<AccessListSummary>,
18}
19
20/// The access level granted to a member of an access list.
21#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
22pub enum AccessLevel {
23    /// No level specified.
24    Unspecified,
25    /// Allowed.
26    Allowed,
27    /// Blocked.
28    Blocked,
29    /// Can manage the list.
30    Manager,
31    /// Full administrator of the list.
32    Admin,
33    /// A level this version of the crate does not know about.
34    #[serde(other)]
35    Unrecognized,
36}
37
38/// An alliance in an access list.
39#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
40#[allow(missing_docs)]
41pub struct AllianceAccess {
42    pub access: AccessLevel,
43    pub alliance_id: i64,
44}
45
46/// A character in an access list.
47#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
48#[allow(missing_docs)]
49pub struct CharacterAccess {
50    pub access: AccessLevel,
51    pub character_id: i64,
52}
53
54/// A corporation in an access list.
55#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
56#[allow(missing_docs)]
57pub struct CorporationAccess {
58    pub access: AccessLevel,
59    pub corporation_id: i64,
60}
61
62/// Who belongs to an access list.
63#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
64#[allow(missing_docs)]
65pub struct AccessListMembership {
66    pub alliances: Vec<AllianceAccess>,
67    pub allow_everyone: bool,
68    pub characters: Vec<CharacterAccess>,
69    pub corporations: Vec<CorporationAccess>,
70}
71
72/// An access list with its members.
73#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
74#[allow(missing_docs)]
75pub struct AccessList {
76    pub description: String,
77    pub id: i64,
78    pub membership: AccessListMembership,
79    pub name: String,
80}
81
82impl AccessListGroup<'_> {
83    /// List the access lists of a character.
84    pub async fn get_character_access_lists(
85        &self,
86        character_id: i64,
87    ) -> EsiResult<Vec<AccessListSummary>> {
88        let path = self
89            .esi
90            .get_endpoint_for_op_id("GetCharactersAccessListsListing")?
91            .replace("{character_id}", &character_id.to_string());
92        let wrapper: AccessLists = self
93            .esi
94            .query("GET", RequestType::Authenticated, &path, None, None)
95            .await?;
96        Ok(wrapper.access_lists)
97    }
98
99    api_get!(
100        /// Get an access list of a character with its members.
101        get_character_access_list,
102        "GetCharactersAccessListsDetail",
103        RequestType::Authenticated,
104        AccessList,
105        (character_id: i64) => "{character_id}",
106        (access_list_id: i64) => "{access_list_id}"
107    );
108}
109
110#[cfg(test)]
111mod tests {
112    use super::*;
113
114    #[test]
115    fn test_parse_access_list() {
116        let list: AccessList = serde_json::from_str(
117            r#"{"description":"d","id":1,"name":"n","membership":{"allow_everyone":false,
118            "alliances":[],"corporations":[],
119            "characters":[{"access":"Admin","character_id":2},{"access":"Odd","character_id":3}]}}"#,
120        )
121        .unwrap();
122        assert_eq!(list.membership.characters[0].access, AccessLevel::Admin);
123        assert_eq!(
124            list.membership.characters[1].access,
125            AccessLevel::Unrecognized
126        );
127    }
128}