EventCache

Struct EventCache 

Source
pub struct EventCache { /* private fields */ }
Expand description

An event cache, providing lots of useful functionality for clients.

Cloning is shallow, and thus is cheap to do.

See also the module-level comment.

Implementations§

Source§

impl EventCache

Source

pub fn request_decryption(&self, request: DecryptionRetryRequest)

Available on crate feature e2e-encryption only.

Explicitly request the redecryption of a set of events.

The redecryption logic in the event cache might sometimes miss that a room key has become available and that a certain set of events has become decryptable.

This might happen because some room keys might arrive in a separate process handling push notifications or if a room key arrives but the process shuts down before we could have decrypted the events.

For this reason it is useful to tell the event cache explicitly that some events should be retried to be redecrypted.

This method allows you to do so. The events that get decrypted, if any, will be advertised over the usual event cache subscription mechanism which can be accessed using the RoomEventCache::subscribe() method.

§Examples
let event_cache = client.event_cache();
let room_id = owned_room_id!("!my_room:localhost");

let request = DecryptionRetryRequest {
    room_id,
    utd_session_ids: BTreeSet::from(["session_id".into()]),
    refresh_info_session_ids: BTreeSet::new(),
};

event_cache.request_decryption(request);
Source

pub fn subscribe_to_decryption_reports( &self, ) -> impl Stream<Item = Result<RedecryptorReport, BroadcastStreamRecvError>>

Available on crate feature e2e-encryption only.

Subscribe to reports that the redecryptor generates.

The redecryption logic in the event cache might sometimes miss that a room key has become available and that a certain set of events has become decryptable.

This might happen because some room keys might arrive in a separate process handling push notifications or if room keys arrive faster than we can handle them.

This stream can be used to get notified about such situations as well as a general channel where the event cache reports which events got successfully redecrypted.

§Examples
let event_cache = client.event_cache();

let mut stream = event_cache.subscribe_to_decryption_reports();

while let Some(Ok(report)) = stream.next().await {
    match report {
        RedecryptorReport::Lagging => {
            // The event cache might have missed to redecrypt some events. We should tell
            // it which events we care about, i.e. which events we're displaying to the
            // user, and let it redecrypt things with an explicit request.
        }
        RedecryptorReport::ResolvedUtds { .. } => {
            // This may be interesting for statistical reasons or in case we'd like to
            // fetch and inspect these events in some manner.
        }
    }
}
Source§

impl EventCache

Source

pub fn subscribe(&self) -> Result<()>

Starts subscribing the EventCache to sync responses, if not done before.

Re-running this has no effect if we already subscribed before, and is cheap.

Source

pub fn has_subscribed(&self) -> bool

Check whether EventCache::subscribe has been called.

Source

pub async fn clear_all_rooms(&self) -> Result<()>

Cleanly clear all the rooms’ event caches.

This will notify any live observers that the room has been cleared.

Source

pub fn subscribe_to_room_generic_updates( &self, ) -> Receiver<RoomEventCacheGenericUpdate>

Subscribe to room generic updates.

If one wants to listen what has changed in a specific room, the RoomEventCache::subscribe is recommended. However, the RoomEventCacheSubscriber type triggers side-effects.

If one wants to get a high-overview, generic, updates for rooms, and without side-effects, this method is recommended. Also, dropping the receiver of this channel will not trigger any side-effect.

Trait Implementations§

Source§

impl Clone for EventCache

Source§

fn clone(&self) -> EventCache

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for EventCache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Any for T
where T: Any,

Source§

impl<T> AsyncTraitDeps for T

Source§

impl<T> CloneAny for T
where T: Any + Clone,

Source§

impl<T> CloneAnySend for T
where T: Any + Send + Clone,

Source§

impl<T> CloneAnySendSync for T
where T: Any + Send + Sync + Clone,

Source§

impl<T> CloneAnySync for T
where T: Any + Sync + Clone,

Source§

impl<T> JsonCastable<CanonicalJsonValue> for T

Source§

impl<T> JsonCastable<Value> for T

Source§

impl<T> SendOutsideWasm for T
where T: Send,

Source§

impl<T> SyncOutsideWasm for T
where T: Sync,