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_core::npc::bot::BotId;
8use nil_core::npc::precursor::PrecursorId;
9use nil_core::player::PlayerId;
10use nil_core::world::config::{WorldConfig, WorldId};
11use nil_core::world::stats::WorldStats;
12use nil_payload::world::*;
13use nil_server_types::RemoteWorld;
14
15impl Client {
16  pub async fn create_remote_world(&self, req: CreateRemoteWorldRequest) -> Result<WorldId> {
17    http::json_post("create-remote-world")
18      .body(req)
19      .server(self.server)
20      .maybe_authorization(self.authorization.as_ref())
21      .user_agent(&self.user_agent)
22      .send()
23      .await
24  }
25
26  pub async fn get_remote_world(&self, req: GetRemoteWorldRequest) -> Result<RemoteWorld> {
27    http::json_post("get-remote-world")
28      .body(req)
29      .server(self.server)
30      .user_agent(&self.user_agent)
31      .send()
32      .await
33  }
34
35  pub async fn get_remote_worlds(&self) -> Result<Vec<RemoteWorld>> {
36    http::json_get("get-remote-worlds")
37      .server(self.server)
38      .user_agent(&self.user_agent)
39      .send()
40      .await
41  }
42
43  pub async fn get_world_bots(&self, req: GetWorldBotsRequest) -> Result<Vec<BotId>> {
44    http::json_post("get-world-bots")
45      .body(req)
46      .server(self.server)
47      .user_agent(&self.user_agent)
48      .send()
49      .await
50  }
51
52  pub async fn get_world_config(&self, req: GetWorldConfigRequest) -> Result<WorldConfig> {
53    http::json_post("get-world-config")
54      .body(req)
55      .server(self.server)
56      .user_agent(&self.user_agent)
57      .send()
58      .await
59  }
60
61  pub async fn get_world_players(&self, req: GetWorldPlayersRequest) -> Result<Vec<PlayerId>> {
62    http::json_post("get-world-players")
63      .body(req)
64      .server(self.server)
65      .user_agent(&self.user_agent)
66      .send()
67      .await
68  }
69
70  pub async fn get_world_precursors(
71    &self,
72    req: GetWorldPrecursorsRequest,
73  ) -> Result<Vec<PrecursorId>> {
74    http::json_post("get-world-precursors")
75      .body(req)
76      .server(self.server)
77      .user_agent(&self.user_agent)
78      .send()
79      .await
80  }
81
82  pub async fn get_world_stats(&self, req: GetWorldStatsRequest) -> Result<WorldStats> {
83    http::json_post("get-world-stats")
84      .body(req)
85      .server(self.server)
86      .user_agent(&self.user_agent)
87      .send()
88      .await
89  }
90
91  pub(super) async fn leave(&self, req: LeaveRequest) -> Result<()> {
92    if self.server.is_local() {
93      http::post("leave")
94        .body(req)
95        .server(self.server)
96        .maybe_authorization(self.authorization.as_ref())
97        .user_agent(&self.user_agent)
98        .send()
99        .await
100    } else {
101      Ok(())
102    }
103  }
104
105  pub async fn save_local_world(&self, req: SaveLocalWorldRequest) -> Result<()> {
106    if self.server.is_local() {
107      http::post("save-local-world")
108        .body(req)
109        .server(self.server)
110        .maybe_authorization(self.authorization.as_ref())
111        .user_agent(&self.user_agent)
112        .send()
113        .await
114    } else {
115      Ok(())
116    }
117  }
118}