Skip to content

Commit 7055f25

Browse files
committed
Add network setting routes (experimental)
1 parent d9e6f6d commit 7055f25

File tree

1 file changed

+149
-1
lines changed

1 file changed

+149
-1
lines changed

src/client.rs

Lines changed: 149 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::{
88
errors::*,
99
indexes::*,
1010
key::{Key, KeyBuilder, KeyUpdater, KeysQuery, KeysResults},
11+
network::{Network, NetworkUpdate},
1112
request::*,
1213
search::*,
1314
task_info::TaskInfo,
@@ -1076,6 +1077,76 @@ impl<Http: HttpClient> Client<Http> {
10761077
Ok(tasks)
10771078
}
10781079

1080+
/// Get the network configuration (sharding).
1081+
///
1082+
/// # Example
1083+
///
1084+
/// ```
1085+
/// # use meilisearch_sdk::{client::*, features::ExperimentalFeatures};
1086+
/// #
1087+
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
1088+
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
1089+
/// #
1090+
/// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async {
1091+
/// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap();
1092+
/// # ExperimentalFeatures::new(&client).set_network(true).update().await.unwrap();
1093+
/// let network = client.get_network().await.unwrap();
1094+
/// # });
1095+
/// ```
1096+
pub async fn get_network(&self) -> Result<Network, Error> {
1097+
let network = self
1098+
.http_client
1099+
.request::<(), (), Network>(
1100+
&format!("{}/network", self.host),
1101+
Method::Get { query: () },
1102+
200,
1103+
)
1104+
.await?;
1105+
1106+
Ok(network)
1107+
}
1108+
1109+
/// Update the network configuration (sharding).
1110+
///
1111+
/// # Example
1112+
///
1113+
/// ```
1114+
/// # use meilisearch_sdk::{client::*, features::ExperimentalFeatures, network::*};
1115+
/// #
1116+
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
1117+
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
1118+
/// #
1119+
/// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async {
1120+
/// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap();
1121+
/// # ExperimentalFeatures::new(&client).set_network(true).update().await.unwrap();
1122+
/// let network = client.update_network(
1123+
/// NetworkUpdate::new()
1124+
/// // .reset_self()
1125+
/// // .reset_remotes()
1126+
/// // .delete_remotes(&["ms-00"])
1127+
/// .with_self("ms-00")
1128+
/// .with_remotes(&[Remote {
1129+
/// name: "ms-00".to_string(),
1130+
/// url: "http://localhost:7700".to_string(),
1131+
/// search_api_key: Some("secret".to_string()),
1132+
/// }]),
1133+
/// )
1134+
/// .await.unwrap();
1135+
/// # });
1136+
/// ```
1137+
pub async fn update_network(&self, network_update: &NetworkUpdate) -> Result<Network, Error> {
1138+
self.http_client
1139+
.request::<(), &NetworkUpdate, Network>(
1140+
&format!("{}/network", self.host),
1141+
Method::Patch {
1142+
body: network_update,
1143+
query: (),
1144+
},
1145+
200,
1146+
)
1147+
.await
1148+
}
1149+
10791150
/// Generates a new tenant token.
10801151
///
10811152
/// # Example
@@ -1166,7 +1237,10 @@ mod tests {
11661237

11671238
use meilisearch_test_macro::meilisearch_test;
11681239

1169-
use crate::{client::*, key::Action, reqwest::qualified_version};
1240+
use crate::{
1241+
client::*, features::ExperimentalFeatures, key::Action, network::Remote,
1242+
reqwest::qualified_version,
1243+
};
11701244

11711245
#[derive(Debug, Serialize, Deserialize, PartialEq)]
11721246
struct Document {
@@ -1316,6 +1390,80 @@ mod tests {
13161390
assert_eq!(tasks.limit, 20);
13171391
}
13181392

1393+
async fn enable_network(client: &Client) {
1394+
ExperimentalFeatures::new(client)
1395+
.set_network(true)
1396+
.update()
1397+
.await
1398+
.unwrap();
1399+
}
1400+
1401+
#[meilisearch_test]
1402+
async fn test_get_network(client: Client) {
1403+
enable_network(&client).await;
1404+
1405+
let network = client.get_network().await.unwrap();
1406+
assert!(matches!(
1407+
network,
1408+
Network {
1409+
self_: _,
1410+
remotes: _,
1411+
}
1412+
))
1413+
}
1414+
1415+
#[meilisearch_test]
1416+
async fn test_update_network_self(client: Client) {
1417+
enable_network(&client).await;
1418+
1419+
client
1420+
.update_network(NetworkUpdate::new().reset_self())
1421+
.await
1422+
.unwrap();
1423+
1424+
let network = client
1425+
.update_network(NetworkUpdate::new().with_self("ms-00"))
1426+
.await
1427+
.unwrap();
1428+
1429+
assert_eq!(network.self_, Some("ms-00".to_string()));
1430+
}
1431+
1432+
#[meilisearch_test]
1433+
async fn test_update_network_remotes(client: Client) {
1434+
enable_network(&client).await;
1435+
1436+
client
1437+
.update_network(NetworkUpdate::new().reset_remotes())
1438+
.await
1439+
.unwrap();
1440+
1441+
let network = client
1442+
.update_network(NetworkUpdate::new().with_remotes(&[Remote {
1443+
name: "ms-00".to_string(),
1444+
url: "http://localhost:7700".to_string(),
1445+
search_api_key: Some("secret".to_string()),
1446+
}]))
1447+
.await
1448+
.unwrap();
1449+
1450+
assert_eq!(
1451+
network.remotes,
1452+
vec![Remote {
1453+
name: "ms-00".to_string(),
1454+
url: "http://localhost:7700".to_string(),
1455+
search_api_key: Some("secret".to_string()),
1456+
}]
1457+
);
1458+
1459+
let network = client
1460+
.update_network(NetworkUpdate::new().delete_remotes(&["ms-00"]))
1461+
.await
1462+
.unwrap();
1463+
1464+
assert_eq!(network.remotes, vec![]);
1465+
}
1466+
13191467
#[meilisearch_test]
13201468
async fn test_get_keys(client: Client) {
13211469
let keys = client.get_keys().await.unwrap();

0 commit comments

Comments
 (0)