RSync

Struct RSync 

Source
pub struct RSync { /* private fields */ }

Implementations§

Source§

impl RSync

Source

pub fn new(source: ReaderWriter, dest: ReaderWriter) -> Self

Source

pub fn with_restore_fs_mtime(self, restore_fs_mtime: bool) -> Self

Source

pub fn with_includes(self, includes: &[&str]) -> RSyncResult<Self>

Source

pub fn with_excludes(self, excludes: &[&str]) -> RSyncResult<Self>

Source

pub async fn sync( &self, ) -> impl Stream<Item = RSyncResult<impl Future<Output = RSyncResult<RSyncStatus>> + '_>> + '_

Sync synchronize source to destination by comparing crc32c if destination already exists

Example

use std::{path::PathBuf, str::FromStr};

use futures::{StreamExt, TryStreamExt};
use gcs_rsync::{
    storage::credentials::authorizeduser,
    sync::{RSync, RSyncResult, ReaderWriter},
};

#[tokio::main]
async fn main() -> RSyncResult<()> {
    let token_generator = Box::new(authorizeduser::default().await.unwrap());

    let home_dir = ".";
    let test_prefix = "bucket_prefix_to_sync";
    let bucket = "bucket_name";

    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
        .sync()
        .await
        .try_buffer_unordered(12)
        .for_each(|x| {
            println!("{:?}", x);
            futures::future::ready(())
        })
        .await;

    Ok(())
}
Source

pub async fn mirror( &self, ) -> RSyncResult<impl Stream<Item = RSyncResult<impl Future<Output = RSyncResult<RMirrorStatus>> + '_>> + '_>

Mirror synchronize source to destination by deleting extras (destination)

Example

use std::{path::PathBuf, str::FromStr};

use futures::{StreamExt, TryStreamExt};
use gcs_rsync::{
    storage::credentials::authorizeduser,
    sync::{RSync, RSyncResult, ReaderWriter},
};

#[tokio::main]
async fn main() -> RSyncResult<()> {
    let token_generator = Box::new(authorizeduser::default().await.unwrap());

    let home_dir = ".";
    let test_prefix = "bucket_prefix_to_sync";
    let bucket = "bucket_name";

    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);

    match rsync.mirror().await {
        Ok(mirror_result) => {
            mirror_result
                .try_buffer_unordered(12)
                .for_each(|x| {
                    println!("{:?}", x);
                    futures::future::ready(())
                })
                .await;
        }
        Err(e) => {
            println!("cannot mirror due to error {:?}", e);
        },
    };
    Ok(())
}

Auto Trait Implementations§

§

impl Freeze for RSync

§

impl !RefUnwindSafe for RSync

§

impl Send for RSync

§

impl Sync for RSync

§

impl Unpin for RSync

§

impl !UnwindSafe for RSync

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,