#![allow(unused)]
use crate::prelude::*;
pub struct FittingsGroup<'a> {
pub(crate) esi: &'a Esi,
}
#[allow(missing_docs)]
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
pub enum FittingFlag {
Cargo,
DroneBay,
FighterBay,
HiSlot0,
HiSlot1,
HiSlot2,
HiSlot3,
HiSlot4,
HiSlot5,
HiSlot6,
HiSlot7,
Invalid,
LoSlot0,
LoSlot1,
LoSlot2,
LoSlot3,
LoSlot4,
LoSlot5,
LoSlot6,
LoSlot7,
MedSlot0,
MedSlot1,
MedSlot2,
MedSlot3,
MedSlot4,
MedSlot5,
MedSlot6,
MedSlot7,
RigSlot0,
RigSlot1,
RigSlot2,
ServiceSlot0,
ServiceSlot1,
ServiceSlot2,
ServiceSlot3,
ServiceSlot4,
ServiceSlot5,
ServiceSlot6,
ServiceSlot7,
SubSystemSlot0,
SubSystemSlot1,
SubSystemSlot2,
SubSystemSlot3,
#[serde(other)]
Unrecognized,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
pub struct FittingItem {
pub flag: FittingFlag,
pub quantity: i64,
pub type_id: i64,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Fitting {
pub description: String,
pub fitting_id: i64,
pub items: Vec<FittingItem>,
pub name: String,
pub ship_type_id: i64,
}
#[derive(Debug, Serialize, Clone)]
pub struct NewFitting {
pub description: String,
pub items: Vec<FittingItem>,
pub name: String,
pub ship_type_id: i64,
}
impl FittingsGroup<'_> {
api_get!(
get_character_fittings,
"GetCharactersCharacterIdFittings",
RequestType::Authenticated,
Vec<Fitting>,
(character_id: i64) => "{character_id}"
);
api_post!(
create_character_fitting,
"PostCharactersCharacterIdFittings",
RequestType::Authenticated,
i64,
(character_id: i64) => "{character_id}",
fitting: &NewFitting,
);
api_delete!(
delete_character_fitting,
"DeleteCharactersCharacterIdFittingsFittingId",
RequestType::Authenticated,
(),
(character_id: i64) => "{character_id}",
(fitting_id: i64) => "{fitting_id}"
);
}
#[cfg(test)]
mod fittings_tests {
use super::*;
#[test]
fn test_parse_fitting() {
let json = r#"[{"description": "d", "fitting_id": 3000000000, "name": "n", "ship_type_id": 587,
"items": [{"flag": "HiSlot0", "quantity": 1, "type_id": 3001},
{"flag": "NewSlot", "quantity": 2, "type_id": 1}]}]"#;
let fits: Vec<Fitting> = serde_json::from_str(json).unwrap();
assert_eq!(fits[0].fitting_id, 3_000_000_000);
assert_eq!(fits[0].items[0].flag, FittingFlag::HiSlot0);
assert_eq!(fits[0].items[1].flag, FittingFlag::Unrecognized);
}
#[test]
fn test_serialize_new_fitting() {
let f = NewFitting {
description: "d".into(),
items: vec![FittingItem {
flag: FittingFlag::SubSystemSlot3,
quantity: 1,
type_id: 5,
}],
name: "n".into(),
ship_type_id: 1,
};
let v = serde_json::to_value(&f).unwrap();
assert_eq!(v["items"][0]["flag"], "SubSystemSlot3");
}
}