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