@@ -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