lib/buffer/stream.ex

defmodule SuperCache.Internal.Stream do
  @moduledoc false

  require Logger
  require SuperCache.Log

  alias SuperCache.Internal.Queue

  def create(q) do
    Stream.resource(
      fn ->
        q
      end,
      fn queue ->
        SuperCache.Log.debug(fn -> "get data from queue" end)
        {Queue.get(queue), queue}
      end,
      fn _queue ->
        :ok
      end
    )
  end

  def make_stream_pipe(enumable) do
    enumable
    |> Stream.each(&push/1)
    |> Stream.run()
  end

  def push(data) do
    SuperCache.put(data)
    SuperCache.Log.debug(fn -> "pushed #{inspect(data)} to cache" end)
  end
end