@@ -8,6 +8,7 @@ use crate::{
8
8
errors:: * ,
9
9
indexes:: * ,
10
10
key:: { Key , KeyBuilder , KeyUpdater , KeysQuery , KeysResults } ,
11
+ network:: { Network , NetworkUpdate } ,
11
12
request:: * ,
12
13
search:: * ,
13
14
task_info:: TaskInfo ,
@@ -1076,6 +1077,76 @@ impl<Http: HttpClient> Client<Http> {
1076
1077
Ok ( tasks)
1077
1078
}
1078
1079
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
+
1079
1150
/// Generates a new tenant token.
1080
1151
///
1081
1152
/// # Example
@@ -1166,7 +1237,10 @@ mod tests {
1166
1237
1167
1238
use meilisearch_test_macro:: meilisearch_test;
1168
1239
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
+ } ;
1170
1244
1171
1245
#[ derive( Debug , Serialize , Deserialize , PartialEq ) ]
1172
1246
struct Document {
@@ -1316,6 +1390,80 @@ mod tests {
1316
1390
assert_eq ! ( tasks. limit, 20 ) ;
1317
1391
}
1318
1392
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
+
1319
1467
#[ meilisearch_test]
1320
1468
async fn test_get_keys ( client : Client ) {
1321
1469
let keys = client. get_keys ( ) . await . unwrap ( ) ;
0 commit comments