-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathbucket_to_folder_mirror.rs
45 lines (37 loc) · 1.15 KB
/
bucket_to_folder_mirror.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use std::{path::PathBuf, str::FromStr};
use futures::{StreamExt, TryStreamExt};
use gcs_rsync::{
storage::credentials::authorizeduser,
sync::{RMirrorStatus, RSync, RSyncResult, ReaderWriter},
};
#[tokio::main]
async fn main() -> RSyncResult<()> {
let token_generator = Box::new(authorizeduser::default().await.unwrap());
let home_dir = env!("HOME");
let test_prefix = env!("EXAMPLE_PREFIX");
let bucket = env!("EXAMPLE_BUCKET");
let source = ReaderWriter::gcs(token_generator, bucket, test_prefix)
.await
.unwrap();
let dest_folder = {
let mut p = PathBuf::from_str(home_dir).unwrap();
p.push(test_prefix);
p
};
let dest = ReaderWriter::fs(dest_folder.as_path());
let rsync = RSync::new(source, dest);
rsync
.mirror()
.await
.try_buffer_unordered(12)
.try_filter(|x| match *x {
RMirrorStatus::NotDeleted(_) => futures::future::ready(false),
_ => futures::future::ready(true),
})
.for_each(|x| {
println!("{:?}", x);
futures::future::ready(())
})
.await;
Ok(())
}