Skip to content

Commit 6c11842

Browse files
authored
Update dumps for v0.28.0 (#319)
* Update dump api for v0.28.0
1 parent 78f08a3 commit 6c11842

File tree

3 files changed

+58
-98
lines changed

3 files changed

+58
-98
lines changed

.code-samples.meilisearch.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -668,8 +668,6 @@ faceted_search_walkthrough_filter_1: |-
668668
.unwrap();
669669
post_dump_1: |-
670670
client.create_dump().await.unwrap();
671-
get_dump_status_1: |-
672-
client.get_dump_status("20201101-110357260").await.unwrap();
673671
phrase_search_1: |-
674672
let results: SearchResults<Movie> = client.index("movies")
675673
.search()

src/dumps.rs

Lines changed: 49 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
//! # Example
1616
//!
1717
//! ```no_run
18-
//! # use meilisearch_sdk::{client::*, errors::*, dumps::*};
18+
//! # use meilisearch_sdk::{client::*, errors::*, dumps::*, dumps::*, task_info::*, tasks::*};
1919
//! # use futures_await_test::async_test;
2020
//! # use std::{thread::sleep, time::Duration};
2121
//! # futures::executor::block_on(async move {
@@ -26,46 +26,18 @@
2626
//! let client = Client::new(MEILISEARCH_HOST, MEILISEARCH_API_KEY);
2727
//!
2828
//! // Create a dump
29-
//! let dump_info = client.create_dump().await.unwrap();
30-
//! assert!(matches!(dump_info.status, DumpStatus::InProgress));
31-
//!
32-
//! // Wait for Meilisearch to proceed
33-
//! sleep(Duration::from_secs(5));
34-
//!
35-
//! // Check the status of the dump
36-
//! let dump_info = client.get_dump_status(&dump_info.uid).await.unwrap();
37-
//! assert!(matches!(dump_info.status, DumpStatus::Done));
29+
//! let task_info = client.create_dump().await.unwrap();
30+
//! assert!(matches!(
31+
//! task_info,
32+
//! TaskInfo {
33+
//! update_type: TaskType::DumpCreation { .. },
34+
//! ..
35+
//! }
36+
//!));
3837
//! # });
3938
//! ```
4039
41-
use crate::{client::Client, errors::Error, request::*};
42-
use serde::Deserialize;
43-
44-
/// The status of a dump.\
45-
/// Contained in [`DumpInfo`].
46-
#[derive(Debug, Deserialize, Clone, Eq, PartialEq)]
47-
#[serde(rename_all = "snake_case")]
48-
pub enum DumpStatus {
49-
/// Dump creation is in progress.
50-
Done,
51-
/// Dump creation is in progress.
52-
InProgress,
53-
/// An error occured during dump process, and the task was aborted.
54-
Failed,
55-
}
56-
57-
/// Limited informations about a dump.\
58-
/// Can be obtained with [create_dump](Client::create_dump) and [get_dump_status](Client::get_dump_status) methods.
59-
#[derive(Debug, Deserialize, Clone)]
60-
#[serde(rename_all = "camelCase")]
61-
pub struct DumpInfo {
62-
pub uid: String,
63-
pub status: DumpStatus,
64-
pub error: Option<serde_json::Value>,
65-
pub started_at: Option<String>,
66-
#[serde(skip_serializing_if = "Option::is_none")]
67-
pub finished_at: Option<String>,
68-
}
40+
use crate::{client::Client, errors::Error, request::*, task_info::TaskInfo};
6941

7042
/// Dump related methods.\
7143
/// See the [dumps](crate::dumps) module.
@@ -77,7 +49,7 @@ impl Client {
7749
/// # Example
7850
///
7951
/// ```no_run
80-
/// # use meilisearch_sdk::{client::*, errors::*, dumps::*};
52+
/// # use meilisearch_sdk::{client::*, errors::*, dumps::*, dumps::*, task_info::*, tasks::*};
8153
/// # use futures_await_test::async_test;
8254
/// # use std::{thread::sleep, time::Duration};
8355
/// # futures::executor::block_on(async move {
@@ -87,85 +59,66 @@ impl Client {
8759
/// #
8860
/// # let client = Client::new(MEILISEARCH_HOST, MEILISEARCH_API_KEY);
8961
/// #
90-
/// let dump_info = client.create_dump().await.unwrap();
91-
/// assert!(matches!(dump_info.status, DumpStatus::InProgress));
62+
/// let task_info = client.create_dump().await.unwrap();
63+
/// assert!(matches!(
64+
/// task_info,
65+
/// TaskInfo {
66+
/// update_type: TaskType::DumpCreation { .. },
67+
/// ..
68+
/// }
69+
/// ));
9270
/// # });
9371
/// ```
94-
pub async fn create_dump(&self) -> Result<DumpInfo, Error> {
95-
request::<(), DumpInfo>(
72+
pub async fn create_dump(&self) -> Result<TaskInfo, Error> {
73+
request::<(), TaskInfo>(
9674
&format!("{}/dumps", self.host),
9775
&self.api_key,
9876
Method::Post(()),
9977
202,
10078
)
10179
.await
10280
}
103-
104-
/// Get the status of a dump creation process using [the uid](DumpInfo::uid) returned after calling the [dump creation method](Client::create_dump).
105-
///
106-
/// # Example
107-
///
108-
/// ```no_run
109-
/// # use meilisearch_sdk::{client::*, errors::*, dumps::*};
110-
/// # use futures_await_test::async_test;
111-
/// # use std::{thread::sleep, time::Duration};
112-
/// #
113-
/// # let MEILISEARCH_HOST = option_env!("MEILISEARCH_HOST").unwrap_or("http://localhost:7700");
114-
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
115-
/// #
116-
/// # futures::executor::block_on(async move {
117-
/// #
118-
/// # let client = Client::new(MEILISEARCH_HOST, MEILISEARCH_API_KEY);
119-
/// # let dump_info = client.create_dump().await.unwrap();
120-
/// # sleep(Duration::from_secs(5));
121-
/// #
122-
/// let dump_info = client.get_dump_status(&dump_info.uid).await.unwrap();
123-
/// # });
124-
/// ```
125-
pub async fn get_dump_status(&self, dump_uid: impl AsRef<str>) -> Result<DumpInfo, Error> {
126-
request::<(), DumpInfo>(
127-
&format!("{}/dumps/{}/status", self.host, dump_uid.as_ref()),
128-
&self.api_key,
129-
Method::Get(()),
130-
200,
131-
)
132-
.await
133-
}
13481
}
13582

13683
/// Alias for [create_dump](Client::create_dump).
137-
pub async fn create_dump(client: &Client) -> Result<DumpInfo, Error> {
84+
pub async fn create_dump(client: &Client) -> Result<TaskInfo, Error> {
13885
client.create_dump().await
13986
}
14087

141-
/// Alias for [get_dump_status](Client::get_dump_status).
142-
pub async fn get_dump_status(
143-
client: &Client,
144-
dump_uid: impl AsRef<str>,
145-
) -> Result<DumpInfo, Error> {
146-
client.get_dump_status(dump_uid).await
147-
}
148-
14988
#[cfg(test)]
15089
mod tests {
15190
use super::*;
152-
use crate::client::*;
91+
use crate::{client::*, tasks::*};
15392
use meilisearch_test_macro::meilisearch_test;
154-
use std::{thread::sleep, time::Duration};
93+
use std::time::Duration;
15594

15695
#[meilisearch_test]
157-
async fn test_dumps(client: Client) {
158-
// Create a dump
159-
let dump_info = client.create_dump().await.unwrap();
160-
assert!(matches!(dump_info.status, DumpStatus::InProgress));
96+
async fn test_dumps_success_creation(client: Client) -> Result<(), Error> {
97+
let task = client
98+
.create_dump()
99+
.await?
100+
.wait_for_completion(
101+
&client,
102+
Some(Duration::from_millis(1)),
103+
Some(Duration::from_millis(6000)),
104+
)
105+
.await?;
106+
107+
assert!(matches!(task, Task::Succeeded { .. }));
108+
Ok(())
109+
}
161110

162-
// Wait for Meilisearch to do the dump
163-
sleep(Duration::from_secs(5));
111+
#[meilisearch_test]
112+
async fn test_dumps_correct_update_type(client: Client) -> Result<(), Error> {
113+
let task_info = client.create_dump().await.unwrap();
164114

165-
// Assert that the dump was successful
166-
let new_dump_info = client.get_dump_status(&dump_info.uid).await.unwrap();
167-
assert!(matches!(new_dump_info.status, DumpStatus::Done));
168-
assert!(new_dump_info.finished_at.is_some());
169-
assert!(new_dump_info.started_at.is_some());
115+
assert!(matches!(
116+
task_info,
117+
TaskInfo {
118+
update_type: TaskType::DumpCreation { .. },
119+
..
120+
}
121+
));
122+
Ok(())
170123
}
171124
}

src/tasks.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ pub enum TaskType {
2828
SettingsUpdate {
2929
details: Option<Settings>,
3030
},
31+
DumpCreation {
32+
details: Option<DumpCreation>,
33+
},
3134
}
3235

3336
#[derive(Debug, Clone, Deserialize)]
@@ -69,6 +72,12 @@ pub struct IndexDeletion {
6972
pub deleted_documents: Option<usize>,
7073
}
7174

75+
#[derive(Debug, Clone, Deserialize)]
76+
#[serde(rename_all = "camelCase")]
77+
pub struct DumpCreation {
78+
pub dump_uid: Option<String>,
79+
}
80+
7281
#[derive(Deserialize, Debug, Clone)]
7382
#[serde(rename_all = "camelCase")]
7483
pub struct FailedTask {

0 commit comments

Comments
 (0)