esi_openapi/groups/
routes.rs1use crate::prelude::*;
2
3pub struct RoutesGroup<'a> {
5 pub(crate) esi: &'a Esi,
6}
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
10pub enum RoutePreference {
11 Shorter,
13 Safer,
15 LessSecure,
17}
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
21pub struct RouteConnection {
22 pub from: i64,
24 pub to: i64,
26}
27
28#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize)]
30pub struct RouteRequest {
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub avoid_systems: Option<Vec<i64>>,
34 #[serde(skip_serializing_if = "Option::is_none")]
36 pub connections: Option<Vec<RouteConnection>>,
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub preference: Option<RoutePreference>,
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub security_penalty: Option<i64>,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
47pub struct Route {
48 pub route: Vec<i64>,
50}
51
52impl RoutesGroup<'_> {
53 api_post!(
54 calculate_route,
56 "PostRoute",
57 RequestType::Public,
58 Route,
59 (origin_system_id: i64) => "{origin_system_id}",
60 (destination_system_id: i64) => "{destination_system_id}",
61 options: &RouteRequest,
62 );
63}
64
65#[cfg(test)]
66mod tests {
67 use super::{RouteConnection, RoutePreference, RouteRequest};
68
69 #[test]
70 fn test_default_request_serializes_to_empty_object() {
71 let json = serde_json::to_string(&RouteRequest::default()).unwrap();
72 assert_eq!(json, "{}");
73 }
74
75 #[test]
76 fn test_request_serialization() {
77 let request = RouteRequest {
78 avoid_systems: Some(vec![30000142]),
79 connections: Some(vec![RouteConnection { from: 1, to: 2 }]),
80 preference: Some(RoutePreference::LessSecure),
81 security_penalty: Some(50),
82 };
83 let value = serde_json::to_value(&request).unwrap();
84 assert_eq!(value["preference"], "LessSecure");
85 assert_eq!(value["connections"][0]["from"], 1);
86 assert_eq!(value["security_penalty"], 50);
87 }
88}