cyfs_lib/sync/
requestor.rs1use super::request::*;
2use crate::*;
3use cyfs_base::BuckyResult;
4
5use http_types::{Method, Request, Url};
6
7
8pub struct SyncRequestor {
9 requestor: HttpRequestorRef,
10 service_url: Url,
11}
12
13impl SyncRequestor {
14 pub fn new(requestor: HttpRequestorRef) -> Self {
15 let addr = requestor.remote_addr();
16
17 let url = format!("http://{}/sync/", addr);
18 let url = Url::parse(&url).unwrap();
19
20 Self {
21 requestor,
22 service_url: url,
23 }
24 }
25
26 pub async fn sync_status(&self, flush: bool) -> BuckyResult<DeviceSyncStatus> {
27 let url = self.service_url.join("status").unwrap();
28
29 let http_req = match flush {
30 true => Request::new(Method::Post, url),
31 false => Request::new(Method::Get, url),
32 };
33
34 debug!("will get device sync status: flush={}", flush);
35
36 let mut resp = self.requestor.request_timeout(http_req, std::time::Duration::from_secs(30)).await?;
37
38 match resp.status() {
39 code if code.is_success() => {
40 let ret = RequestorHelper::decode_json_body(&mut resp).await?;
41
42 info!(
43 "get device sync status success: flush={}, status={:?}",
44 flush, ret
45 );
46 Ok(ret)
47 }
48 code @ _ => {
49 let e = RequestorHelper::error_from_resp(&mut resp).await;
50
51 error!("get device sync status failed: code={}, err={}", code, e);
52 Err(e)
53 }
54 }
55 }
56}