Skip to main content

Cache

Struct Cache 

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

A handle on the cache database plus the active mode and TTLs. Cheap to clone (clones share one connection); clone it out of the Context to use get_or_fetch with a closure that borrows the context. The database is opened on first use.

Implementations§

Source§

impl Cache

Source

pub fn index_restaurants( &self, rows: &[RestaurantRow], seen_from: Option<(f64, f64)>, ) -> Result<()>

Upsert restaurants seen in a list response. seen_from is the delivery location of the request; when given, each row’s distance / ETA / fee are also recorded for that location. No-op when writes are off.

Source

pub fn index_restaurants_at( &self, rows: &[RestaurantRow], seen_from: Option<(f64, f64)>, now: i64, ) -> Result<()>

Source

pub fn index_items(&self, items: &[ItemRow]) -> Result<()>

Upsert individual items (e.g. dish hits in search results), keeping any category already known. No-op when writes are off.

Source

pub fn index_items_at(&self, items: &[ItemRow], now: i64) -> Result<()>

Source

pub fn index_menu( &self, restaurant: &RestaurantRow, categories: &[CategoryRow], items: &[ItemRow], seen_from: Option<(f64, f64)>, ) -> Result<()>

Store a full menu: the restaurant, its categories (replacing the old ones) and items; items no longer on the menu are removed. No-op when writes are off.

Source

pub fn index_menu_at( &self, restaurant: &RestaurantRow, categories: &[CategoryRow], items: &[ItemRow], seen_from: Option<(f64, f64)>, now: i64, ) -> Result<()>

Source

pub fn search_restaurants( &self, q: &RestaurantQuery, ) -> Result<Vec<RestaurantHit>>

Query restaurants in the catalog (works in every mode: it only reads what earlier fetches stored).

Source

pub fn search_items(&self, q: &ItemQuery) -> Result<Vec<ItemHit>>

Query menu items in the catalog.

Source

pub fn restaurant(&self, id: &str) -> Result<Option<RestaurantHit>>

One restaurant by id.

Source§

impl Cache

Source

pub fn cached_image(&self, url: &str) -> Option<CachedImage>

The cached file for url, if present (and still on disk). Marks it recently used.

Source

pub fn store_image( &self, url: &str, bytes: &[u8], content_type: &str, ) -> Result<CachedImage>

Store downloaded image bytes for url (dedupes by content hash), then evict over the size cap.

Source

pub fn store_image_at( &self, url: &str, bytes: &[u8], content_type: &str, now: i64, ) -> Result<CachedImage>

Source

pub async fn fetch_image(&self, url: &str) -> Result<CachedImage>

The cached file for url, downloading it first if needed. Only Grab CDN URLs are fetched (image_url_allowed); no cookies are sent.

Source§

impl Cache

Source

pub fn new( root: impl Into<PathBuf>, config: CacheConfig, mode: CacheMode, ) -> Self

A cache rooted at root (the database is root/cache.sqlite). config.enabled == false forces CacheMode::Off.

Source

pub fn from_config(config: &CacheConfig, mode: CacheMode) -> Self

The production cache: paths::cache_dir, the [cache] config, and GRAB_NO_CACHE=1 forcing it off. If the cache dir can’t be resolved the cache is simply off.

Source

pub fn with_mode(&self, mode: CacheMode) -> Self

The same cache (sharing its connection) with another mode; still off if disabled in config.

Source

pub fn mode(&self) -> CacheMode

Source

pub fn root(&self) -> &Path

The cache directory.

Source

pub fn db_path(&self) -> PathBuf

Source

pub fn config(&self) -> &CacheConfig

Source

pub fn ttl(&self, kind: CacheKind) -> u64

Source

pub fn get<T: DeserializeOwned>(&self, key: &CacheKey) -> Option<T>

A fresh cached value, if reads are enabled and one exists. Any problem reading or decoding the entry is a miss.

Source

pub fn lookup<T: DeserializeOwned>(&self, key: &CacheKey) -> Option<Fetched<T>>

Like get, with the time the entry was fetched.

Source

pub fn lookup_stale<T: DeserializeOwned>( &self, key: &CacheKey, ) -> Option<Fetched<T>>

The stored value for key even if it has expired (but not yet been pruned), for falling back when the live call fails. None when the mode is off.

Source

pub fn put<T: Serialize>(&self, key: &CacheKey, value: &T) -> Result<()>

Store a value (no-op when writes are off or the kind’s TTL is 0).

Source

pub async fn get_or_fetch<T, F, Fut>( &self, key: &CacheKey, fetch: F, ) -> Result<T>
where T: Serialize + DeserializeOwned, F: FnOnce() -> Fut, Fut: Future<Output = Result<T>>,

Return the cached value for key, or run fetch, store its result (best-effort) and return it. Errors from fetch are returned and never cached. Prefer T = serde_json::Value holding the raw upstream response.

Source

pub async fn get_or_fetch_meta<T, F, Fut>( &self, key: &CacheKey, fetch: F, ) -> Result<Fetched<T>>
where T: Serialize + DeserializeOwned, F: FnOnce() -> Fut, Fut: Future<Output = Result<T>>,

get_or_fetch that also says whether the value came from the cache and how old it is.

Source

pub fn stats(&self) -> Result<CacheStats>

Source

pub fn clear(&self, kind: Option<CacheKind>, expired_only: bool) -> Result<u64>

Remove response entries, optionally only of one kind and/or only expired ones. Returns how many were removed. Catalog rows and images are kept (see clear_all / prune).

Source

pub fn clear_all(&self) -> Result<ClearReport>

Remove everything: responses, catalog rows and image files.

Source

pub fn prune(&self) -> Result<PruneReport>

Housekeeping: drop expired responses, catalog rows older than index_max_age_days, and evict images over image_max_mb (LRU), then compact the database.

Trait Implementations§

Source§

impl Clone for Cache

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Cache

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Cache

§

impl RefUnwindSafe for Cache

§

impl Send for Cache

§

impl Sync for Cache

§

impl Unpin for Cache

§

impl UnsafeUnpin for Cache

§

impl UnwindSafe for Cache

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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