# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved.
use Croma
defmodule Antikythera.Session.Cookie do
@moduledoc """
Implementation of `Antikythera.Session.Store` that stores session info in cookie.
"""
alias Antikythera.Session.Store
@behaviour Store
@impl true
defun load(cookie :: nil | String.t()) :: {nil, Store.session_kv()} do
nil ->
{nil, %{}}
cookie when is_binary(cookie) ->
value = Poison.decode(cookie) |> Croma.Result.get(%{})
{nil, value}
end
@impl true
defun save(nil, value :: Store.session_kv()) :: String.t() do
Poison.encode!(value)
end
@impl true
defun delete(nil) :: :ok, do: :ok
end