Caching: Add caching behavior, add null implementation.
authorlain <lain@soykaf.club>
Mon, 21 Dec 2020 10:42:53 +0000 (11:42 +0100)
committerlain <lain@soykaf.club>
Mon, 21 Dec 2020 10:42:53 +0000 (11:42 +0100)
lib/pleroma/caching.ex [new file with mode: 0644]
test/support/null_cache.ex

diff --git a/lib/pleroma/caching.ex b/lib/pleroma/caching.ex
new file mode 100644 (file)
index 0000000..766d12d
--- /dev/null
@@ -0,0 +1,19 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Caching do
+  @callback get!(Cachex.cache(), any()) :: any()
+  @callback get(Cachex.cache(), any()) :: {atom(), any()}
+  @callback put(Cachex.cache(), any(), any(), Keyword.t()) :: {Cachex.status(), boolean()}
+  @callback put(Cachex.cache(), any(), any()) :: {Cachex.status(), boolean()}
+  @callback fetch!(Cachex.cache(), any(), function() | nil) :: any()
+  # @callback del(Cachex.cache(), any(), Keyword.t()) :: {Cachex.status(), boolean()}
+  @callback del(Cachex.cache(), any()) :: {Cachex.status(), boolean()}
+  @callback stream!(Cachex.cache(), any()) :: Enumerable.t()
+  @callback expire_at(Cachex.cache(), binary(), number()) :: {Cachex.status(), boolean()}
+  @callback exists?(Cachex.cache(), any()) :: {Cachex.status(), boolean()}
+  @callback execute!(Cachex.cache(), function()) :: any()
+  @callback get_and_update(Cachex.cache(), any(), function()) ::
+              {:commit | :ignore, any()}
+end
index 72e7c996a78788512d50a43ba93ba38dea7d4e75..c63df6a3993268b8ec4afd0d2b2210c23a87e309 100644 (file)
@@ -21,9 +21,11 @@ defmodule Pleroma.NullCache do
   def get(_, _), do: {:ok, nil}
 
   @impl true
-  def fetch!(_, _, func) do
-    {_, res} = func.()
-    res
+  def fetch!(_, key, func) do
+    case func.(key) do
+      {_, res} -> res
+      res -> res
+    end
   end
 
   @impl true