#![allow(unused)]
use crate::prelude::*;
pub struct FleetsGroup<'a> {
pub(crate) esi: &'a Esi,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
pub enum FleetRole {
#[serde(rename = "fleet_commander")]
FleetCommander,
#[serde(rename = "wing_commander")]
WingCommander,
#[serde(rename = "squad_commander")]
SquadCommander,
#[serde(rename = "squad_member")]
SquadMember,
#[serde(other)]
Unrecognized,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct CharacterFleet {
pub fleet_boss_id: i64,
pub fleet_id: i64,
pub role: FleetRole,
pub squad_id: i64,
pub wing_id: i64,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct FleetInfo {
pub is_free_move: bool,
pub is_registered: bool,
pub is_voice_enabled: bool,
pub motd: String,
}
#[derive(Debug, Serialize, Clone, Default)]
pub struct FleetUpdate {
#[serde(skip_serializing_if = "Option::is_none")]
pub is_free_move: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub motd: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct FleetMember {
pub character_id: i64,
pub join_time: String,
pub role: FleetRole,
pub role_name: String,
pub ship_type_id: i64,
pub solar_system_id: i64,
pub squad_id: i64,
#[serde(default)]
pub station_id: Option<i64>,
pub takes_fleet_warp: bool,
pub wing_id: i64,
}
#[derive(Debug, Serialize, Clone)]
pub struct FleetInvitation {
pub character_id: i64,
pub role: FleetRole,
#[serde(skip_serializing_if = "Option::is_none")]
pub squad_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wing_id: Option<i64>,
}
#[derive(Debug, Serialize, Clone)]
pub struct FleetMovement {
pub role: FleetRole,
#[serde(skip_serializing_if = "Option::is_none")]
pub squad_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wing_id: Option<i64>,
}
#[derive(Debug, Serialize, Clone)]
pub struct FleetNaming {
pub name: String,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct FleetSquad {
pub id: i64,
pub name: String,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct FleetWing {
pub id: i64,
pub name: String,
pub squads: Vec<FleetSquad>,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy)]
pub struct CreatedWing {
pub wing_id: i64,
}
#[derive(Debug, Deserialize, Serialize, Clone, Copy)]
pub struct CreatedSquad {
pub squad_id: i64,
}
impl FleetsGroup<'_> {
api_get!(
get_character_fleet,
"GetCharactersCharacterIdFleet",
RequestType::Authenticated,
CharacterFleet,
(character_id: i64) => "{character_id}"
);
api_get!(
get_fleet,
"GetFleetsFleetId",
RequestType::Authenticated,
FleetInfo,
(fleet_id: i64) => "{fleet_id}"
);
api_put!(
update_fleet,
"PutFleetsFleetId",
RequestType::Authenticated,
(),
(fleet_id: i64) => "{fleet_id}",
settings: &FleetUpdate,
);
api_get!(
get_members,
"GetFleetsFleetIdMembers",
RequestType::Authenticated,
Vec<FleetMember>,
(fleet_id: i64) => "{fleet_id}"
);
api_post!(
invite_member,
"PostFleetsFleetIdMembers",
RequestType::Authenticated,
(),
(fleet_id: i64) => "{fleet_id}",
invitation: &FleetInvitation,
);
api_delete!(
kick_member,
"DeleteFleetsFleetIdMembersMemberId",
RequestType::Authenticated,
(),
(fleet_id: i64) => "{fleet_id}",
(member_id: i64) => "{member_id}"
);
api_put!(
move_member,
"PutFleetsFleetIdMembersMemberId",
RequestType::Authenticated,
(),
(fleet_id: i64) => "{fleet_id}",
(member_id: i64) => "{member_id}",
movement: &FleetMovement,
);
api_delete!(
delete_squad,
"DeleteFleetsFleetIdSquadsSquadId",
RequestType::Authenticated,
(),
(fleet_id: i64) => "{fleet_id}",
(squad_id: i64) => "{squad_id}"
);
api_put!(
rename_squad,
"PutFleetsFleetIdSquadsSquadId",
RequestType::Authenticated,
(),
(fleet_id: i64) => "{fleet_id}",
(squad_id: i64) => "{squad_id}",
naming: &FleetNaming,
);
api_get!(
get_wings,
"GetFleetsFleetIdWings",
RequestType::Authenticated,
Vec<FleetWing>,
(fleet_id: i64) => "{fleet_id}"
);
api_post!(
create_wing,
"PostFleetsFleetIdWings",
RequestType::Authenticated,
CreatedWing,
(fleet_id: i64) => "{fleet_id}";
NoBody
);
api_delete!(
delete_wing,
"DeleteFleetsFleetIdWingsWingId",
RequestType::Authenticated,
(),
(fleet_id: i64) => "{fleet_id}",
(wing_id: i64) => "{wing_id}"
);
api_put!(
rename_wing,
"PutFleetsFleetIdWingsWingId",
RequestType::Authenticated,
(),
(fleet_id: i64) => "{fleet_id}",
(wing_id: i64) => "{wing_id}",
naming: &FleetNaming,
);
api_post!(
create_squad,
"PostFleetsFleetIdWingsWingIdSquads",
RequestType::Authenticated,
CreatedSquad,
(fleet_id: i64) => "{fleet_id}",
(wing_id: i64) => "{wing_id}";
NoBody
);
}
#[cfg(test)]
mod fleets_tests {
use super::*;
#[test]
fn test_parse_fleet_and_members() {
let f: CharacterFleet = serde_json::from_str(
r#"{"fleet_boss_id": 1, "fleet_id": 1234567890123, "role": "squad_member",
"squad_id": -1, "wing_id": 2000000000000}"#,
)
.unwrap();
assert_eq!(f.fleet_id, 1_234_567_890_123);
assert_eq!(f.role, FleetRole::SquadMember);
let m: Vec<FleetMember> = serde_json::from_str(
r#"[{"character_id": 1, "join_time": "t", "role": "new_role", "role_name": "r",
"ship_type_id": 587, "solar_system_id": 30000142, "squad_id": 1, "wing_id": 2,
"takes_fleet_warp": true}]"#,
)
.unwrap();
assert_eq!(m[0].role, FleetRole::Unrecognized);
assert_eq!(m[0].station_id, None);
}
#[test]
fn test_serialize_bodies() {
let inv = FleetInvitation {
character_id: 1,
role: FleetRole::SquadMember,
squad_id: Some(5),
wing_id: None,
};
assert_eq!(
serde_json::to_string(&inv).unwrap(),
r#"{"character_id":1,"role":"squad_member","squad_id":5}"#
);
let u = FleetUpdate {
is_free_move: Some(true),
motd: None,
};
assert_eq!(
serde_json::to_string(&u).unwrap(),
r#"{"is_free_move":true}"#
);
}
#[test]
fn test_parse_wings_and_created() {
let w: Vec<FleetWing> =
serde_json::from_str(r#"[{"id": 1, "name": "w", "squads": [{"id": 2, "name": "s"}]}]"#)
.unwrap();
assert_eq!(w[0].squads[0].id, 2);
let c: CreatedWing = serde_json::from_str(r#"{"wing_id": 2000000000000}"#).unwrap();
assert_eq!(c.wing_id, 2_000_000_000_000);
}
}