struct Puller<'a> {Show 14 fields
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,
departed: Departed,
departed_there: Vec<(String, String)>,
past: Option<u32>,
mine: BTreeSet<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.
departed: DepartedWhat this device took out here of the devices that no longer count
(Departed): never fetched again; Sioul keeping the folder itself, taken
out there too (push).
departed_there: Vec<(String, String)>Those of their past rounds still there and gone here, with their ETag
as listed (MIRROR): taken out there by push; and every file there
of a device whose files you removed (Departed::devices).
past: Option<u32>Sioul keeping the folder itself: this device’s rounds below this one
are past their time (share::rounds_past): taken out there whatever
it remembers sending (take_out_own), never brought back (restore).
mine: BTreeSet<String>Sioul keeping the folder itself: the sealed files this device made or
counts as its own (share::own_sealed): one its copy fetched once
and its own change names now goes up as its own (own_files).
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 away(&mut self, relative: &str, item: &Item)
fn away(&mut self, relative: &str, item: &Item)
A file there that this device took out here and never fetches again
(Departed): a device’s round past its time, any file of a device
whose files you removed. Sioul keeping the folder itself, one gone
here is taken out there at the end of the step (push).
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 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 take_out_own(&mut self) -> Result<(), Stop>
fn take_out_own(&mut self) -> Result<(), Stop>
What this device let go here, taken out there too: its records past
their time (remove_old_rounds: every device read past them) listed in
this step and gone here, never its last round, and nothing while none
of its records is here: those it remembers sending, and those below the
readers’ floor (past, share::rounds_past) whatever it remembers (one
forgotten after a refused delete, “Send everything again”, its state
lost); then the sealed files it swept. Until 17 October 2026 a past
round it no longer remembered stayed there, and restore brought it
back here at the next step, megabytes each.
Sourcefn take_out_departed(&mut self)
fn take_out_departed(&mut self)
What this device took out here of the devices that no longer count
(Departed), taken out there too: their past rounds still listed in
this step and gone here, over the ETag listed; the sealed files swept,
every six hours at most, when still as old there (take_out_swept).
Another device doing the same first makes it gone (404), a sync
app’s copy sent again since makes it changed (412): left, as any
other answer or failure, for a later step.
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.