#[non_exhaustive]pub struct Ancestor {
pub branch_id: String,
pub dist: i64,
pub cutoff: Option<String>,
}Expand description
One resolved ancestor of a lineage, nearest first.
Public here rather than in graph because it is a fact about the register
this module owns, and because the two functions that take one —
crate::temporal::resolve_beliefs and
crate::temporal::reconstruct_on — are read-path answers about a
branch. Obtain one from
Database::ancestry; the crate
resolves it from branches and nothing else can construct it correctly
(0.15.17, D-259).
One resolved ancestor: exactly the three columns the recursive
ancestry_cte produced until 0.15.17.
Public through crate::branch as the answer reconstruct_on resolves
over, which is review C-10: until 0.15.17 the resolution rule existed only
as SQL, so a caller holding a Vec<EdgeBelief> had no function to finish
the question the fold started.
§Usually read, occasionally built (0.15.17, D-255)
#[non_exhaustive], and new is the way in — a fourth
column is plausible (the fork’s own created_at has been wanted twice) and
a struct literal outside this crate would make it a major version.
Almost every caller reads one: Database::ancestry resolves it out of
branches, refusing an unregistered lineage first, and
resolve_beliefs consumes what it
returned. The constructor exists for the caller who is exercising that pure
function rather than a database, which is a real case — it is what this
crate’s own test for it does — and is worth naming, because an ancestry
assembled by hand is a distance rule the caller has stated and
resolve_beliefs will apply as faithfully as it applies a resolved one.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.branch_id: StringThe lineage.
dist: i64Steps from the reader: 0 is the reader itself.
cutoff: Option<String>The instant past which this ancestor’s rows are not visible, or None
for the reader, which has no cutoff.
Implementations§
Source§impl Ancestor
impl Ancestor
Sourcepub fn new(branch_id: impl Into<String>, dist: i64) -> Self
pub fn new(branch_id: impl Into<String>, dist: i64) -> Self
One ancestor at dist steps up the parent chain, uncut.
cutoff is None, which is the reader’s own row and the only shape
with no fork point above it; cutoff sets it for
the rest. Two arguments and a setter rather than three arguments,
because the third is an Option that is None on exactly one row of
every ancestry and a positional None at every call site reads as a
decision nobody made.
Building one states a distance rule rather than reporting a resolved
one. crate::Database::ancestry is what to use against a real ledger.
Trait Implementations§
impl Eq for Ancestor
impl StructuralPartialEq for Ancestor
Auto Trait Implementations§
impl Freeze for Ancestor
impl RefUnwindSafe for Ancestor
impl Send for Ancestor
impl Sync for Ancestor
impl Unpin for Ancestor
impl UnsafeUnpin for Ancestor
impl UnwindSafe for Ancestor
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request