pub struct FileStorePair { /* private fields */ }Expand description
The MLS store and the protocol-state store of one account, opened together.
Use this rather than opening the two stores one by one: it refuses the
pairs the engine would lose data over, which the stores cannot see alone.
Hand Self::secure_storage and Self::state_storage to
initialize_mls, and keep the pair to close it.
Implementations§
Source§impl FileStorePair
impl FileStorePair
Sourcepub fn open(
mls_root: impl AsRef<Path>,
state_root: impl AsRef<Path>,
namespace: &str,
provider: &dyn StoreKeyProvider,
) -> Result<Self, FileStoreError>
pub fn open( mls_root: impl AsRef<Path>, state_root: impl AsRef<Path>, namespace: &str, provider: &dyn StoreKeyProvider, ) -> Result<Self, FileStoreError>
Opens the MLS store at mls_root and the protocol-state store at
state_root, for the account namespace, refusing a pair the engine
would lose data over.
Each refusal says what to change, and none changes or deletes a record:
FileStoreError::RootsOverlap: one directory for both, or one inside the other. Asked as spelled before anything is created, and again of the directories once both exist, because a volume that folds case makes one directory of two spellings.FileStoreError::StateWithoutIdentity: protocol state with no MLS record beside it. A new identity would be minted, and it could not unseal that state. Asked before anything is created.FileStoreError::ForeignState: protocol state that belongs to another MLS store. Asked once both are open.- Whatever either store’s own open refuses: a wrong key, a directory another store holds.
A record key the MLS store reports as damaged is not refused: nothing opens the state sealed under it again, and the engine’s new key and its settlement of that state as failed is how the application learns which messages were lost. Once the pair is bound (this binds it), the pairing ids decide every later open, so the records left under the lost key do not make it look like another identity’s state. A pair whose record key was regenerated while its stores were opened one by one, never bound, is still judged by those records on its first open here, and can be refused.
A pair that passes is bound: both stores hold the same pairing id from then on.
Sourcepub fn secure_storage(&self) -> Arc<SealedFileMlsStorage> ⓘ
pub fn secure_storage(&self) -> Arc<SealedFileMlsStorage> ⓘ
The MLS store, for initialize_mls.
Sourcepub fn state_storage(&self) -> Arc<FileProtocolStateStorage> ⓘ
pub fn state_storage(&self) -> Arc<FileProtocolStateStorage> ⓘ
The protocol-state store, for initialize_mls.
Sourcepub fn close(&self)
pub fn close(&self)
Releases both directories, whoever still holds either store. The
protocol-state store first: it is the one sealed under the other’s
record key. See SealedFileMlsStorage::close.
Trait Implementations§
Source§impl Clone for FileStorePair
impl Clone for FileStorePair
Auto Trait Implementations§
impl Freeze for FileStorePair
impl RefUnwindSafe for FileStorePair
impl Send for FileStorePair
impl Sync for FileStorePair
impl Unpin for FileStorePair
impl UnsafeUnpin for FileStorePair
impl UnwindSafe for FileStorePair
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Declassify for T
impl<T> Declassify for T
type Declassified = T
fn declassify(self) -> T
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> 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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§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();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§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();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§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();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§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();Source§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.
Source§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);