pub struct WormChainRecord {
pub epoch_id: EpochId,
pub seq: ManifestSeq,
pub prev_head: ChainHead,
pub head: Option<ChainHead>,
pub manifest_version_id: Option<String>,
}Expand description
The chain receipt a copy leaves on a segment’s custom metadata.
The record has two forms. The request form, from
WormChainRecord::request, carries no head: the broker builds it before
the copy, when the manifest bytes do not exist yet. The receipt form,
from WormChainRecord::with_head, carries the head the manifest produced
and is the only form next_chain_stamp continues from.
On the wire the record is a JSON object with a required top-level
"version", WORM_CHAIN_RECORD_VERSION. The object is closed
(deny_unknown_fields): a later field always comes with a new version, so
a reader never drops a part of a receipt it does not understand.
Fields§
§epoch_id: EpochIdChain run this manifest belongs to.
seq: ManifestSeqPosition within the run.
prev_head: ChainHeadChain head before this manifest.
head: Option<ChainHead>The head after this manifest. None in the pre-copy request form.
manifest_version_id: Option<String>Object-store version id of the manifest object, when the bucket has versioning on.
Implementations§
Source§impl WormChainRecord
impl WormChainRecord
Sourcepub fn request(stamp: ChainStamp) -> Self
pub fn request(stamp: ChainStamp) -> Self
The pre-copy request form of a record at stamp, with no head yet.
Sourcepub fn with_head(self, head: ChainHead) -> Self
pub fn with_head(self, head: ChainHead) -> Self
Turns a request form into a receipt by recording the head the manifest produced.
Sourcepub fn with_manifest_version(self, version_id: Option<String>) -> Self
pub fn with_manifest_version(self, version_id: Option<String>) -> Self
Records the object-store version id of the manifest object.
Sourcepub fn to_custom_metadata(&self) -> Result<CustomMetadata, WormError>
pub fn to_custom_metadata(&self) -> Result<CustomMetadata, WormError>
Encodes the record as the JSON bytes of a CustomMetadata.
§Errors
Returns WormError::MalformedChainRecord if serde_json cannot
serialise the record. Every field is a UUID, an integer, a fixed-size
byte array, or a string, so this does not happen in practice.
Sourcepub fn from_custom_metadata(cm: &CustomMetadata) -> Result<Self, WormError>
pub fn from_custom_metadata(cm: &CustomMetadata) -> Result<Self, WormError>
Decodes a record from a segment’s CustomMetadata.
Never panics. Arbitrary bytes produce an error.
§Errors
Returns WormError::UnsupportedChainRecordVersion when the object
has no "version", as a record written before krabka 1.0 does, or a
version other than WORM_CHAIN_RECORD_VERSION. Returns
WormError::MalformedChainRecord when cm does not hold the JSON of
a chain record: bytes that are not UTF-8, text that is not a JSON
object, an object with a missing or unknown field, or a hex string that
is not 64 characters.
Sourcepub fn next_stamp(&self) -> Option<ChainStamp>
pub fn next_stamp(&self) -> Option<ChainStamp>
The chain position the next manifest takes after this one.
None for the request form, which has produced no head to chain onto.
Trait Implementations§
Source§impl Clone for WormChainRecord
impl Clone for WormChainRecord
Source§fn clone(&self) -> WormChainRecord
fn clone(&self) -> WormChainRecord
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for WormChainRecord
impl Debug for WormChainRecord
impl Eq for WormChainRecord
Source§impl PartialEq for WormChainRecord
impl PartialEq for WormChainRecord
impl StructuralPartialEq for WormChainRecord
Auto Trait Implementations§
impl Freeze for WormChainRecord
impl RefUnwindSafe for WormChainRecord
impl Send for WormChainRecord
impl Sync for WormChainRecord
impl Unpin for WormChainRecord
impl UnsafeUnpin for WormChainRecord
impl UnwindSafe for WormChainRecord
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,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<F> FnGhost for F
§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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);