use crate::prelude::*;
pub struct RoutesGroup<'a> {
pub(crate) esi: &'a Esi,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum RoutePreference {
Shorter,
Safer,
LessSecure,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub struct RouteConnection {
pub from: i64,
pub to: i64,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize)]
pub struct RouteRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub avoid_systems: Option<Vec<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub connections: Option<Vec<RouteConnection>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub preference: Option<RoutePreference>,
#[serde(skip_serializing_if = "Option::is_none")]
pub security_penalty: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
pub struct Route {
pub route: Vec<i64>,
}
impl RoutesGroup<'_> {
api_post!(
calculate_route,
"PostRoute",
RequestType::Public,
Route,
(origin_system_id: i64) => "{origin_system_id}",
(destination_system_id: i64) => "{destination_system_id}",
options: &RouteRequest,
);
}
#[cfg(test)]
mod tests {
use super::{RouteConnection, RoutePreference, RouteRequest};
#[test]
fn test_default_request_serializes_to_empty_object() {
let json = serde_json::to_string(&RouteRequest::default()).unwrap();
assert_eq!(json, "{}");
}
#[test]
fn test_request_serialization() {
let request = RouteRequest {
avoid_systems: Some(vec![30000142]),
connections: Some(vec![RouteConnection { from: 1, to: 2 }]),
preference: Some(RoutePreference::LessSecure),
security_penalty: Some(50),
};
let value = serde_json::to_value(&request).unwrap();
assert_eq!(value["preference"], "LessSecure");
assert_eq!(value["connections"][0]["from"], 1);
assert_eq!(value["security_penalty"], 50);
}
}