Packages

Package providing Discord API struct caches for crux.

Current section

Files

Jump to
crux_cache lib cache none.ex
Raw

lib/cache/none.ex

defmodule Crux.Cache.None do
@moduledoc """
Functions both as `Crux.Cache` and `Crux.Cache.Provider`
As `Crux.Cache.Provider`: returning `Crux.Cache.None` for all caches.
As `Crux.Cache`:
* `cache` and `update` will always return the atomtified data.
* `delete` is a noop and returns `:ok`
* `fetch` is a noop and returns `:error`
- `fetch!` is a noop and raises an error.
"""
@behaviour Crux.Cache.Provider
@doc "Returns `Crux.Cache.None`."
@impl true
@spec guild_cache() :: module()
def guild_cache(), do: __MODULE__
@doc "Returns `Crux.Cache.None`."
@impl true
@spec channel_cache() :: module()
def channel_cache(), do: __MODULE__
@doc "Returns `Crux.Cache.None`."
@impl true
@spec emoji_cache() :: module()
def emoji_cache(), do: __MODULE__
@doc "Returns `Crux.Cache.None`."
@impl true
@spec presence_cache() :: module()
def presence_cache(), do: __MODULE__
@doc "Returns `Crux.Cache.None`."
@impl true
@spec user_cache() :: module()
def user_cache(), do: __MODULE__
alias Crux.Structs.Util
@behaviour Crux.Cache
@doc "Returns atomified data as is."
@impl true
@spec insert(term()) :: term()
def insert(data), do: Util.atomify(data)
@doc "Returns atomified data as is."
@impl true
@spec update(term()) :: term()
def update(data), do: Util.atomify(data)
@doc "Is a noop returning `:ok`."
@impl true
@spec delete(Crux.Cache.key()) :: :ok
def delete(_id), do: :ok
@doc "Is a noop returning `:error`."
@impl true
@spec fetch(Crux.Cache.key()) :: :error
def fetch(_id), do: :error
@doc "Is a noop raising an error."
@spec fetch!(Crux.Cache.key()) :: no_return()
@impl true
def fetch!(_id), do: raise("#{__MODULE__} does not contain any structures.")
end