Skip to main content

DefaultPreloader

Struct DefaultPreloader 

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

Default CachePreloader with a small set of hardcoded heuristics over the existing top-level cache keys.

Holds a [Weak] reference to the cache to avoid the obvious Arc<ThingsCache>Arc<dyn CachePreloader> reference cycle. Once the last strong reference to the cache is dropped, CachePreloader::warm becomes a no-op.

Heuristics:

  • Accessing inbox:all predicts today:all (priority 8).
  • Accessing today:all predicts inbox:all (priority 10).
  • Accessing areas:all predicts projects:all (priority 7).

Other keys produce no predictions. Future preloaders (per-project tasks, search-history-driven) plug in via the same trait.

§Warm-loop behaviour

The inbox:alltoday:all pair is mutually predictive, which would ordinarily create a perpetual warming loop. ThingsCache::notify_preloader guards against this: a predicted key is only enqueued when it is not already present in the cache. Once both keys are warm, no further enqueuing occurs until one of them expires or is invalidated.

Implementations§

Source§

impl DefaultPreloader

Source

pub fn new(cache: &Arc<ThingsCache>, db: Arc<ThingsDatabase>) -> Arc<Self>

Construct a preloader that holds a [Weak] handle to cache and a strong handle to db. Wrap in Arc before registering with ThingsCache::set_preloader.

Trait Implementations§

Source§

impl CachePreloader for DefaultPreloader

Source§

fn predict(&self, accessed_key: &str) -> Vec<(String, u32)>

Called after a cache access. Returns (key, priority) pairs to enqueue for background warming. Return vec![] to opt out for this access.
Source§

fn warm(&self, key: &str)

Called by the warming loop for each top-priority queued key. Implementor fetches and populates the cache, typically via tokio::spawn.

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<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