struct Puller<'a> {
server: &'a Server,
folder: &'a Path,
into: &'a Path,
own: &'a str,
state: &'a mut State,
pulled: &'a mut Pulled,
now: i64,
own_there: BTreeMap<String, String>,
covered: BTreeSet<String>,
lost: bool,
blobs: Vec<(String, Item)>,
blobs_listed: Option<String>,
}Expand description
One pull: the server’s folder looked through, what is newer there fetched.
Fields§
§server: &'a Server§folder: &'a PathThe sharing folder as the sync app keeps it, and where what comes goes.
into: &'a Path§own: &'a str§state: &'a mut State§pulled: &'a mut Pulled§now: i64§own_there: BTreeMap<String, String>This device’s own files seen in the folders looked through, their ETags there (MIRROR).
covered: BTreeSet<String>The folders of the server looked through in this step (“” the folder itself, “devices/”).
lost: boolSioul keeping the folder itself, its copy lost: none of its records here.
blobs: Vec<(String, Item)>The others’ sealed files to bring (MIRROR), listed by run, fetched
last (fetch_blobs), once this device’s own files went up.
blobs_listed: Option<String>blobs/’s ETag as listed: kept once every file of it came.
Implementations§
Source§impl Puller<'_>
impl Puller<'_>
fn url(&self, relative: &str) -> String
Sourcefn unchanged(&self, relative: &str, etag: &str) -> bool
fn unchanged(&self, relative: &str, etag: &str) -> bool
A folder of the server not changed since it was last looked through, lately.
Sourcefn looked(&mut self, relative: &str, etag: &str)
fn looked(&mut self, relative: &str, etag: &str)
A folder looked through to its end: until it changes, not again for a while.
fn run(&mut self) -> Result<(), Stop>
Sourcefn mirror(&self) -> bool
fn mirror(&self) -> bool
Sioul keeps the folder itself (MIRROR): what comes goes into it, no sync app beside.
Sourcefn own_listed(&mut self, dir: &str, listing: &Listing)
fn own_listed(&mut self, dir: &str, listing: &Listing)
A folder of the server just looked through: this device’s own files
in it (MIRROR), their ETags there, for what goes up next.
Sourcefn seal(&mut self, root: &Listing) -> Result<(), Stop>
fn seal(&mut self, root: &Listing) -> Result<(), Stop>
The server’s seal, read again when it changed there or every six hours: another, or none, and nothing more is fetched from there.
Sourcefn forget_gone(&mut self, dir: &str, listing: &Listing)
fn forget_gone(&mut self, dir: &str, listing: &Listing)
Files of a folder of the server no longer there: forgotten, and their copies fetched gone (a records’ file only once its writer removed it: every device had read past it).
Sourcefn small(&mut self, relative: &str, item: &Item) -> Result<(), Stop>
fn small(&mut self, relative: &str, item: &Item) -> Result<(), Stop>
A small file (notes, an entry, a claim) fetched whole when it changed there since it was last fetched; kept only when it differs from the synced folder’s copy, and only when all of it came.
Sourcefn restore(&mut self, relative: &str, item: &Item) -> Result<(), Stop>
fn restore(&mut self, relative: &str, item: &Item) -> Result<(), Stop>
One of this device’s own files there and not here (MIRROR), never
sent from here, or its copy lost (lost: none of its records here):
brought back, so that it goes on after its last record rather than
numbering them again over the others’ reading.
Sourcefn fetch_blobs(&mut self) -> Result<(), Stop>
fn fetch_blobs(&mut self) -> Result<(), Stop>
The others’ sealed files run listed, brought one after the other,
last in the step. One that fails stops the rest until the next step,
which looks through the folder again rather than ten minutes later.
Sourcefn blob(&mut self, relative: &str, item: &Item) -> Result<(), Stop>
fn blob(&mut self, relative: &str, item: &Item) -> Result<(), Stop>
A sealed file another device put there and not here (MIRROR):
fetched whole, kept only whole. One sent from here never comes back.
Sourcefn push(&mut self) -> Result<(), Stop>
fn push(&mut self) -> Result<(), Stop>
This device’s own files (MIRROR) changed here since they went up, or
changed or gone there since (seen in the folders just looked through),
sent, in own_files’ order, each over what is there as it was seen
(send). Then what it let go here goes there too: its records past
their time (remove_old_rounds: every device read past them), never
its last round, and nothing while none of its records is here; the
sealed files it swept.
Sourcefn send(
&mut self,
relative: &str,
size: u64,
modified: u64,
seen: Option<String>,
) -> Result<(), Stop>
fn send( &mut self, relative: &str, size: u64, modified: u64, seen: Option<String>, ) -> Result<(), Stop>
One of this device’s files sent whole over what is there as it was
seen (seen: its ETag; none there). Refused because it changed there
meanwhile (412), sent again over what is there now: it is this
device’s own. A folder missing there (409), made first. A sealed file
goes only where none is: one there already is the same. Refused again
and again: left for the next step; nothing here is lost.
Sourcefn make_folders(&mut self, relative: &str) -> Result<(), Stop>
fn make_folders(&mut self, relative: &str) -> Result<(), Stop>
The folders a file’s path goes through, made there (MKCOL) when missing.
Sourcefn take_out(&mut self, relative: &str, seen: Option<String>) -> Result<(), Stop>
fn take_out(&mut self, relative: &str, seen: Option<String>) -> Result<(), Stop>
One of this device’s files taken out there, only as it was seen when its ETag is known; gone already, or changed there since (another device sealed the same content again), forgotten here all the same.
Sourcefn round(&mut self, name: &str, item: &Item) -> Result<(), Stop>
fn round(&mut self, name: &str, item: &Item) -> Result<(), Stop>
A device’s records, when the server’s copy is longer than both the synced folder’s and what was fetched: what is new there, from the end of the longer copy here, its last whole line asked again and checked to be the same there (a copy that does not join comes whole). Only whole lines are kept: a line half arrived comes again next time.
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for Puller<'a>
impl<'a> !UnwindSafe for Puller<'a>
impl<'a> Freeze for Puller<'a>
impl<'a> Send for Puller<'a>
impl<'a> Sync for Puller<'a>
impl<'a> Unpin for Puller<'a>
impl<'a> UnsafeUnpin for Puller<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.