1use crate::client::Client;
5use crate::error::Result;
6use nil_payload::request::prelude::*;
7use nil_payload::response::prelude::*;
8
9pub trait Request {
10 type Response;
11
12 async fn send(self, client: &Client) -> Result<Self::Response>;
13}
14
15macro_rules! impl_request {
16 (function = $fun:ident, request = $req:ty, response = $res:ty) => {
17 impl Request for $req {
18 type Response = $res;
19
20 async fn send(self, client: &Client) -> Result<Self::Response> {
21 client.$fun(self).await
22 }
23 }
24 };
25}
26
27macro_rules! dispatch {
28 ($($name:ident),+) => {
29 paste::paste! {
30 $(
31 impl_request!(
32 function = $name,
33 request = [<$name:camel Request>],
34 response = [<$name:camel Response>]
35 );
36 )+
37 }
38 };
39}
40
41macro_rules! dispatch_unit {
42 ($($name:ident),+) => {
43 paste::paste! {
44 $(
45 impl_request!(
46 function = $name,
47 request = [<$name:camel Request>],
48 response = ()
49 );
50 )+
51 }
52 };
53}
54
55dispatch!(
56 authorize,
57 cheat_get_academy_recruit_queue,
58 cheat_get_academy_recruit_queues,
59 cheat_get_all_academy_recruit_queues,
60 cheat_get_all_prefecture_build_queues,
61 cheat_get_all_stable_recruit_queues,
62 cheat_get_build_steps,
63 cheat_get_cities,
64 cheat_get_city,
65 cheat_get_ethics,
66 cheat_get_idle_armies_at,
67 cheat_get_idle_personnel_at,
68 cheat_get_infrastructure,
69 cheat_get_maneuvers,
70 cheat_get_maneuvers_of,
71 cheat_get_player,
72 cheat_get_players,
73 cheat_get_prefecture_build_queue,
74 cheat_get_prefecture_build_queues,
75 cheat_get_resources,
76 cheat_get_stable_recruit_queue,
77 cheat_get_stable_recruit_queues,
78 cheat_get_storage_capacity,
79 cheat_spawn_bot,
80 create_remote_world,
81 get_academy_recruit_catalog,
82 get_armies,
83 get_army,
84 get_army_owner,
85 get_bot_coords,
86 get_chat_history,
87 get_cities,
88 get_city,
89 get_city_limit,
90 get_city_score,
91 get_continent_size,
92 get_idle_armies_at,
93 get_idle_armies_coords,
94 get_maneuver,
95 get_market,
96 get_market_fee,
97 get_player,
98 get_player_coords,
99 get_player_ids,
100 get_player_maintenance,
101 get_player_military,
102 get_player_status,
103 get_player_storage_capacity,
104 get_player_worlds,
105 get_precursor_coords,
106 get_prefecture_build_catalog,
107 get_public_bot,
108 get_public_bots,
109 get_public_cities,
110 get_public_city,
111 get_public_field,
112 get_public_fields,
113 get_public_player,
114 get_public_players,
115 get_public_precursor,
116 get_public_precursors,
117 get_rank,
118 get_ranking,
119 get_remote_world,
120 get_round,
121 get_stable_recruit_catalog,
122 get_workshop_recruit_catalog,
123 get_world_bots,
124 get_world_config,
125 get_world_personnel,
126 get_world_players,
127 get_world_precursors,
128 get_world_rulers,
129 get_world_stats,
130 player_exists,
131 push_chat_message,
132 request_maneuver,
133 search_city,
134 search_public_city,
135 set_player_ready,
136 simulate_battle,
137 start_round,
138 user_exists,
139 validate_token
140);
141
142dispatch_unit!(
143 add_academy_recruit_order,
144 add_prefecture_build_order,
145 add_stable_recruit_order,
146 add_workshop_recruit_order,
147 buy_resources,
148 cancel_academy_recruit_order,
149 cancel_maneuver,
150 cancel_prefecture_build_order,
151 cancel_stable_recruit_order,
152 cancel_workshop_recruit_order,
153 cheat_fill_world,
154 cheat_skip_round,
155 cheat_set_bot_ethics,
156 cheat_set_building_level,
157 cheat_set_food,
158 cheat_set_influence,
159 cheat_set_iron,
160 cheat_set_market_fee,
161 cheat_set_market_vault_resources,
162 cheat_set_max_food,
163 cheat_set_max_infrastructure,
164 cheat_set_max_iron,
165 cheat_set_max_resources,
166 cheat_set_max_silo_resources,
167 cheat_set_max_stone,
168 cheat_set_max_warehouse_resources,
169 cheat_set_max_wood,
170 cheat_set_resources,
171 cheat_set_stability,
172 cheat_set_stone,
173 cheat_set_wood,
174 cheat_spawn_city,
175 cheat_spawn_personnel,
176 delete_remote_world,
177 create_user,
178 forward_report,
179 rename_city,
180 save_local_world,
181 sell_resources,
182 send_resources,
183 set_player_status,
184 spawn_player,
185 toggle_building
186);