15
15
//! # Example
16
16
//!
17
17
//! ```no_run
18
- //! # use meilisearch_sdk::{client::*, errors::*, dumps::*};
18
+ //! # use meilisearch_sdk::{client::*, errors::*, dumps::*, dumps::*, task_info::*, tasks::* };
19
19
//! # use futures_await_test::async_test;
20
20
//! # use std::{thread::sleep, time::Duration};
21
21
//! # futures::executor::block_on(async move {
26
26
//! let client = Client::new(MEILISEARCH_HOST, MEILISEARCH_API_KEY);
27
27
//!
28
28
//! // 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
+ //!));
38
37
//! # });
39
38
//! ```
40
39
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 } ;
69
41
70
42
/// Dump related methods.\
71
43
/// See the [dumps](crate::dumps) module.
@@ -77,7 +49,7 @@ impl Client {
77
49
/// # Example
78
50
///
79
51
/// ```no_run
80
- /// # use meilisearch_sdk::{client::*, errors::*, dumps::*};
52
+ /// # use meilisearch_sdk::{client::*, errors::*, dumps::*, dumps::*, task_info::*, tasks::* };
81
53
/// # use futures_await_test::async_test;
82
54
/// # use std::{thread::sleep, time::Duration};
83
55
/// # futures::executor::block_on(async move {
@@ -87,85 +59,66 @@ impl Client {
87
59
/// #
88
60
/// # let client = Client::new(MEILISEARCH_HOST, MEILISEARCH_API_KEY);
89
61
/// #
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
+ /// ));
92
70
/// # });
93
71
/// ```
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 > (
96
74
& format ! ( "{}/dumps" , self . host) ,
97
75
& self . api_key ,
98
76
Method :: Post ( ( ) ) ,
99
77
202 ,
100
78
)
101
79
. await
102
80
}
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
- }
134
81
}
135
82
136
83
/// 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 > {
138
85
client. create_dump ( ) . await
139
86
}
140
87
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
-
149
88
#[ cfg( test) ]
150
89
mod tests {
151
90
use super :: * ;
152
- use crate :: client:: * ;
91
+ use crate :: { client:: * , tasks :: * } ;
153
92
use meilisearch_test_macro:: meilisearch_test;
154
- use std:: { thread :: sleep , time:: Duration } ;
93
+ use std:: time:: Duration ;
155
94
156
95
#[ 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
+ }
161
110
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 ( ) ;
164
114
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 ( ( ) )
170
123
}
171
124
}
0 commit comments