Skip to content

Commit e4698df

Browse files
ellnixMubelotix
authored andcommitted
Add network setting routes (experimental)
1 parent 5f81ec4 commit e4698df

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,
@@ -1107,6 +1108,76 @@ impl<Http: HttpClient> Client<Http> {
11071108
Ok(tasks)
11081109
}
11091110

1111+
/// Get the network configuration (sharding).
1112+
///
1113+
/// # Example
1114+
///
1115+
/// ```
1116+
/// # use meilisearch_sdk::{client::*, features::ExperimentalFeatures};
1117+
/// #
1118+
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
1119+
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
1120+
/// #
1121+
/// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async {
1122+
/// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap();
1123+
/// # ExperimentalFeatures::new(&client).set_network(true).update().await.unwrap();
1124+
/// let network = client.get_network().await.unwrap();
1125+
/// # });
1126+
/// ```
1127+
pub async fn get_network(&self) -> Result<Network, Error> {
1128+
let network = self
1129+
.http_client
1130+
.request::<(), (), Network>(
1131+
&format!("{}/network", self.host),
1132+
Method::Get { query: () },
1133+
200,
1134+
)
1135+
.await?;
1136+
1137+
Ok(network)
1138+
}
1139+
1140+
/// Update the network configuration (sharding).
1141+
///
1142+
/// # Example
1143+
///
1144+
/// ```
1145+
/// # use meilisearch_sdk::{client::*, features::ExperimentalFeatures, network::*};
1146+
/// #
1147+
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
1148+
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
1149+
/// #
1150+
/// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async {
1151+
/// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap();
1152+
/// # ExperimentalFeatures::new(&client).set_network(true).update().await.unwrap();
1153+
/// let network = client.update_network(
1154+
/// NetworkUpdate::new()
1155+
/// // .reset_self()
1156+
/// // .reset_remotes()
1157+
/// // .delete_remotes(&["ms-00"])
1158+
/// .with_self("ms-00")
1159+
/// .with_remotes(&[Remote {
1160+
/// name: "ms-00".to_string(),
1161+
/// url: "http://localhost:7700".to_string(),
1162+
/// search_api_key: Some("secret".to_string()),
1163+
/// }]),
1164+
/// )
1165+
/// .await.unwrap();
1166+
/// # });
1167+
/// ```
1168+
pub async fn update_network(&self, network_update: &NetworkUpdate) -> Result<Network, Error> {
1169+
self.http_client
1170+
.request::<(), &NetworkUpdate, Network>(
1171+
&format!("{}/network", self.host),
1172+
Method::Patch {
1173+
body: network_update,
1174+
query: (),
1175+
},
1176+
200,
1177+
)
1178+
.await
1179+
}
1180+
11101181
/// Generates a new tenant token.
11111182
///
11121183
/// # Example
@@ -1205,7 +1276,10 @@ mod tests {
12051276

12061277
use meilisearch_test_macro::meilisearch_test;
12071278

1208-
use crate::{client::*, key::Action, reqwest::qualified_version};
1279+
use crate::{
1280+
client::*, features::ExperimentalFeatures, key::Action, network::Remote,
1281+
reqwest::qualified_version,
1282+
};
12091283

12101284
#[derive(Debug, Serialize, Deserialize, PartialEq)]
12111285
struct Document {
@@ -1355,6 +1429,80 @@ mod tests {
13551429
assert_eq!(tasks.limit, 20);
13561430
}
13571431

1432+
async fn enable_network(client: &Client) {
1433+
ExperimentalFeatures::new(client)
1434+
.set_network(true)
1435+
.update()
1436+
.await
1437+
.unwrap();
1438+
}
1439+
1440+
#[meilisearch_test]
1441+
async fn test_get_network(client: Client) {
1442+
enable_network(&client).await;
1443+
1444+
let network = client.get_network().await.unwrap();
1445+
assert!(matches!(
1446+
network,
1447+
Network {
1448+
self_: _,
1449+
remotes: _,
1450+
}
1451+
))
1452+
}
1453+
1454+
#[meilisearch_test]
1455+
async fn test_update_network_self(client: Client) {
1456+
enable_network(&client).await;
1457+
1458+
client
1459+
.update_network(NetworkUpdate::new().reset_self())
1460+
.await
1461+
.unwrap();
1462+
1463+
let network = client
1464+
.update_network(NetworkUpdate::new().with_self("ms-00"))
1465+
.await
1466+
.unwrap();
1467+
1468+
assert_eq!(network.self_, Some("ms-00".to_string()));
1469+
}
1470+
1471+
#[meilisearch_test]
1472+
async fn test_update_network_remotes(client: Client) {
1473+
enable_network(&client).await;
1474+
1475+
client
1476+
.update_network(NetworkUpdate::new().reset_remotes())
1477+
.await
1478+
.unwrap();
1479+
1480+
let network = client
1481+
.update_network(NetworkUpdate::new().with_remotes(&[Remote {
1482+
name: "ms-00".to_string(),
1483+
url: "http://localhost:7700".to_string(),
1484+
search_api_key: Some("secret".to_string()),
1485+
}]))
1486+
.await
1487+
.unwrap();
1488+
1489+
assert_eq!(
1490+
network.remotes,
1491+
vec![Remote {
1492+
name: "ms-00".to_string(),
1493+
url: "http://localhost:7700".to_string(),
1494+
search_api_key: Some("secret".to_string()),
1495+
}]
1496+
);
1497+
1498+
let network = client
1499+
.update_network(NetworkUpdate::new().delete_remotes(&["ms-00"]))
1500+
.await
1501+
.unwrap();
1502+
1503+
assert_eq!(network.remotes, vec![]);
1504+
}
1505+
13581506
#[meilisearch_test]
13591507
async fn test_get_keys(client: Client) {
13601508
let keys = client.get_keys().await.unwrap();

0 commit comments

Comments
 (0)