cyfs_lib/sync/
requestor.rs

1use 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}