@@ -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 ,
@@ -1107,6 +1108,76 @@ impl<Http: HttpClient> Client<Http> {
1107
1108
Ok ( tasks)
1108
1109
}
1109
1110
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
+
1110
1181
/// Generates a new tenant token.
1111
1182
///
1112
1183
/// # Example
@@ -1205,7 +1276,10 @@ mod tests {
1205
1276
1206
1277
use meilisearch_test_macro:: meilisearch_test;
1207
1278
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
+ } ;
1209
1283
1210
1284
#[ derive( Debug , Serialize , Deserialize , PartialEq ) ]
1211
1285
struct Document {
@@ -1355,6 +1429,80 @@ mod tests {
1355
1429
assert_eq ! ( tasks. limit, 20 ) ;
1356
1430
}
1357
1431
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
+
1358
1506
#[ meilisearch_test]
1359
1507
async fn test_get_keys ( client : Client ) {
1360
1508
let keys = client. get_keys ( ) . await . unwrap ( ) ;
0 commit comments