Skip to main content

nil_client/client/
world.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4use super::Client;
5use crate::error::Result;
6use crate::http;
7use nil_payload::request::world::*;
8use nil_payload::response::world::*;
9
10impl Client {
11  pub async fn create_remote_world(
12    &self,
13    req: CreateRemoteWorldRequest,
14  ) -> Result<CreateRemoteWorldResponse> {
15    http::json_post("create-remote-world")
16      .body(req)
17      .server(self.server)
18      .maybe_authorization(self.authorization.as_ref())
19      .circuit_breaker(self.circuit_breaker())
20      .user_agent(&self.user_agent)
21      .send()
22      .await
23  }
24
25  pub async fn delete_remote_world(&self, req: DeleteRemoteWorldRequest) -> Result<()> {
26    http::post("delete-remote-world")
27      .body(req)
28      .server(self.server)
29      .maybe_authorization(self.authorization.as_ref())
30      .circuit_breaker(self.circuit_breaker())
31      .user_agent(&self.user_agent)
32      .send()
33      .await
34  }
35
36  pub async fn get_remote_world(
37    &self,
38    req: GetRemoteWorldRequest,
39  ) -> Result<GetRemoteWorldResponse> {
40    http::json_put("get-remote-world")
41      .body(req)
42      .server(self.server)
43      .circuit_breaker(self.circuit_breaker())
44      .retry(&self.retry)
45      .user_agent(&self.user_agent)
46      .send()
47      .await
48  }
49
50  pub async fn get_remote_world_limit(&self) -> Result<GetRemoteWorldLimitResponse> {
51    http::json_get("get-remote-world-limit")
52      .server(self.server)
53      .circuit_breaker(self.circuit_breaker())
54      .retry(&self.retry)
55      .user_agent(&self.user_agent)
56      .send()
57      .await
58  }
59
60  pub async fn get_remote_world_limit_per_user(
61    &self,
62  ) -> Result<GetRemoteWorldLimitPerUserResponse> {
63    http::json_get("get-remote-world-limit-per-user")
64      .server(self.server)
65      .circuit_breaker(self.circuit_breaker())
66      .retry(&self.retry)
67      .user_agent(&self.user_agent)
68      .send()
69      .await
70  }
71
72  pub async fn get_remote_worlds(&self) -> Result<GetRemoteWorldsResponse> {
73    http::json_get("get-remote-worlds")
74      .server(self.server)
75      .circuit_breaker(self.circuit_breaker())
76      .retry(&self.retry)
77      .user_agent(&self.user_agent)
78      .send()
79      .await
80  }
81
82  pub async fn get_world_bots(&self, req: GetWorldBotsRequest) -> Result<GetWorldBotsResponse> {
83    http::json_put("get-world-bots")
84      .body(req)
85      .server(self.server)
86      .circuit_breaker(self.circuit_breaker())
87      .retry(&self.retry)
88      .user_agent(&self.user_agent)
89      .send()
90      .await
91  }
92
93  pub async fn get_world_config(
94    &self,
95    req: GetWorldConfigRequest,
96  ) -> Result<GetWorldConfigResponse> {
97    http::json_put("get-world-config")
98      .body(req)
99      .server(self.server)
100      .circuit_breaker(self.circuit_breaker())
101      .retry(&self.retry)
102      .user_agent(&self.user_agent)
103      .send()
104      .await
105  }
106
107  pub async fn get_world_personnel(
108    &self,
109    req: GetWorldPersonnelRequest,
110  ) -> Result<GetWorldPersonnelResponse> {
111    http::json_put("get-world-personnel")
112      .body(req)
113      .server(self.server)
114      .circuit_breaker(self.circuit_breaker())
115      .retry(&self.retry)
116      .user_agent(&self.user_agent)
117      .send()
118      .await
119  }
120
121  pub async fn get_world_players(
122    &self,
123    req: GetWorldPlayersRequest,
124  ) -> Result<GetWorldPlayersResponse> {
125    http::json_put("get-world-players")
126      .body(req)
127      .server(self.server)
128      .circuit_breaker(self.circuit_breaker())
129      .retry(&self.retry)
130      .user_agent(&self.user_agent)
131      .send()
132      .await
133  }
134
135  pub async fn get_world_precursors(
136    &self,
137    req: GetWorldPrecursorsRequest,
138  ) -> Result<GetWorldPrecursorsResponse> {
139    http::json_put("get-world-precursors")
140      .body(req)
141      .server(self.server)
142      .circuit_breaker(self.circuit_breaker())
143      .retry(&self.retry)
144      .user_agent(&self.user_agent)
145      .send()
146      .await
147  }
148
149  pub async fn get_world_stats(&self, req: GetWorldStatsRequest) -> Result<GetWorldStatsResponse> {
150    http::json_put("get-world-stats")
151      .body(req)
152      .server(self.server)
153      .circuit_breaker(self.circuit_breaker())
154      .retry(&self.retry)
155      .user_agent(&self.user_agent)
156      .send()
157      .await
158  }
159
160  pub(super) async fn leave(&self, req: LeaveRequest) -> Result<()> {
161    if self.server.is_local() {
162      http::post("leave")
163        .body(req)
164        .server(self.server)
165        .maybe_authorization(self.authorization.as_ref())
166        .circuit_breaker(self.circuit_breaker())
167        .user_agent(&self.user_agent)
168        .send()
169        .await
170    } else {
171      Ok(())
172    }
173  }
174
175  pub async fn save_local_world(&self, req: SaveLocalWorldRequest) -> Result<()> {
176    if self.server.is_local() {
177      http::post("save-local-world")
178        .body(req)
179        .server(self.server)
180        .maybe_authorization(self.authorization.as_ref())
181        .circuit_breaker(self.circuit_breaker())
182        .user_agent(&self.user_agent)
183        .send()
184        .await
185    } else {
186      Ok(())
187    }
188  }
189}