Skip to content

Commit 316f9f7

Browse files
Merge #656
656: Support all experimental features r=curquiza a=ellnix # Pull Request ## Related issue Fixes #655 Required for #610 (therefore #613) Required for #647 Co-authored-by: ellnix <ellnix@disroot.org>
2 parents 24d4d7f + 5dd12f4 commit 316f9f7

File tree

2 files changed

+100
-8
lines changed

2 files changed

+100
-8
lines changed

.code-samples.meilisearch.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1650,7 +1650,7 @@ get_experimental_features_1: |-
16501650
update_experimental_features_1: |-
16511651
let client = Client::new("http://localhost:7700", Some("apiKey"));
16521652
let features = ExperimentalFeatures::new(&client);
1653-
// update the feature you want here
1653+
features.set_metrics(true)
16541654
let res = features
16551655
.update()
16561656
.await

src/features.rs

+99-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ use serde::{Deserialize, Serialize};
88
/// Struct representing the experimental features result from the API.
99
#[derive(Clone, Debug, Deserialize)]
1010
#[serde(rename_all = "camelCase")]
11-
pub struct ExperimentalFeaturesResult {}
11+
pub struct ExperimentalFeaturesResult {
12+
pub metrics: bool,
13+
pub logs_route: bool,
14+
pub contains_filter: bool,
15+
pub network: bool,
16+
pub edit_documents_by_function: bool,
17+
}
1218

1319
/// Struct representing the experimental features request.
1420
///
@@ -28,12 +34,30 @@ pub struct ExperimentalFeaturesResult {}
2834
pub struct ExperimentalFeatures<'a, Http: HttpClient> {
2935
#[serde(skip_serializing)]
3036
client: &'a Client<Http>,
37+
38+
#[serde(skip_serializing_if = "Option::is_none")]
39+
pub metrics: Option<bool>,
40+
#[serde(skip_serializing_if = "Option::is_none")]
41+
pub contains_filter: Option<bool>,
42+
#[serde(skip_serializing_if = "Option::is_none")]
43+
pub logs_route: Option<bool>,
44+
#[serde(skip_serializing_if = "Option::is_none")]
45+
pub network: Option<bool>,
46+
#[serde(skip_serializing_if = "Option::is_none")]
47+
pub edit_documents_by_function: Option<bool>,
3148
}
3249

3350
impl<'a, Http: HttpClient> ExperimentalFeatures<'a, Http> {
3451
#[must_use]
3552
pub fn new(client: &'a Client<Http>) -> Self {
36-
ExperimentalFeatures { client }
53+
ExperimentalFeatures {
54+
client,
55+
metrics: None,
56+
logs_route: None,
57+
network: None,
58+
contains_filter: None,
59+
edit_documents_by_function: None,
60+
}
3761
}
3862

3963
/// Get all the experimental features
@@ -88,6 +112,34 @@ impl<'a, Http: HttpClient> ExperimentalFeatures<'a, Http> {
88112
)
89113
.await
90114
}
115+
116+
pub fn set_metrics(&mut self, metrics: bool) -> &mut Self {
117+
self.metrics = Some(metrics);
118+
self
119+
}
120+
121+
pub fn set_logs_route(&mut self, logs_route: bool) -> &mut Self {
122+
self.logs_route = Some(logs_route);
123+
self
124+
}
125+
126+
pub fn set_contains_filter(&mut self, contains_filter: bool) -> &mut Self {
127+
self.contains_filter = Some(contains_filter);
128+
self
129+
}
130+
131+
pub fn set_edit_documents_by_function(
132+
&mut self,
133+
edit_documents_by_function: bool,
134+
) -> &mut Self {
135+
self.edit_documents_by_function = Some(edit_documents_by_function);
136+
self
137+
}
138+
139+
pub fn set_network(&mut self, network: bool) -> &mut Self {
140+
self.network = Some(network);
141+
self
142+
}
91143
}
92144

93145
#[cfg(test)]
@@ -96,12 +148,52 @@ mod tests {
96148
use meilisearch_test_macro::meilisearch_test;
97149

98150
#[meilisearch_test]
99-
async fn test_experimental_features_get(client: Client) {
100-
let features = ExperimentalFeatures::new(&client);
101-
// set feature here, once some exist again
151+
async fn test_experimental_features_set_metrics(client: Client) {
152+
let mut features = ExperimentalFeatures::new(&client);
153+
features.set_metrics(true);
154+
let _ = features.update().await.unwrap();
155+
156+
let res = features.get().await.unwrap();
157+
assert!(res.metrics)
158+
}
159+
160+
#[meilisearch_test]
161+
async fn test_experimental_features_set_logs_route(client: Client) {
162+
let mut features = ExperimentalFeatures::new(&client);
163+
features.set_logs_route(true);
164+
let _ = features.update().await.unwrap();
165+
166+
let res = features.get().await.unwrap();
167+
assert!(res.logs_route)
168+
}
169+
170+
#[meilisearch_test]
171+
async fn test_experimental_features_set_contains_filter(client: Client) {
172+
let mut features = ExperimentalFeatures::new(&client);
173+
features.set_contains_filter(true);
174+
let _ = features.update().await.unwrap();
175+
176+
let res = features.get().await.unwrap();
177+
assert!(res.contains_filter)
178+
}
179+
180+
#[meilisearch_test]
181+
async fn test_experimental_features_set_network(client: Client) {
182+
let mut features = ExperimentalFeatures::new(&client);
183+
features.set_network(true);
184+
let _ = features.update().await.unwrap();
185+
186+
let res = features.get().await.unwrap();
187+
assert!(res.network)
188+
}
189+
190+
#[meilisearch_test]
191+
async fn test_experimental_features_set_edit_documents_by_function(client: Client) {
192+
let mut features = ExperimentalFeatures::new(&client);
193+
features.set_edit_documents_by_function(true);
102194
let _ = features.update().await.unwrap();
103195

104-
let _res = features.get().await.unwrap();
105-
// assert that the feature has been set once they exist again
196+
let res = features.get().await.unwrap();
197+
assert!(res.edit_documents_by_function)
106198
}
107199
}

0 commit comments

Comments
 (0)