esi_openapi/groups/
access_list.rs1use crate::prelude::*;
2
3pub struct AccessListGroup<'a> {
5 pub(crate) esi: &'a Esi,
6}
7
8#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
10pub struct AccessListSummary {
11 pub id: i64,
13}
14
15#[derive(Debug, Deserialize)]
16struct AccessLists {
17 access_lists: Vec<AccessListSummary>,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
22pub enum AccessLevel {
23 Unspecified,
25 Allowed,
27 Blocked,
29 Manager,
31 Admin,
33 #[serde(other)]
35 Unrecognized,
36}
37
38#[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#[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#[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#[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#[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 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_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}