Add TranslationUnitsMap as content type for Translations

This commit is contained in:
Thelonius Kort
2022-12-26 19:04:21 +01:00
parent 9e9c7b5519
commit afb25a328c
2 changed files with 35 additions and 1 deletions

View File

@ -0,0 +1,33 @@
defmodule Outlook.Translations.TranslationUnitsMap do
use Ecto.Type
alias Outlook.InternalTree.TranslationUnit
def type, do: :map
def cast(tumap) when is_map(tumap) do
{:ok, tumap}
end
def cast(_), do: :error
def load(serialized_map) when is_map(serialized_map) do
tumap = for {key, val_str} <- serialized_map do
val_map = Jason.decode!(val_str, keys: :atoms!)
val_tu = struct(TranslationUnit, %{val_map | status: String.to_atom(val_map.status)})
{key, val_tu}
end
|> Enum.into(%{})
{:ok, tumap}
end
def dump(tumap) when is_map(tumap) do
serialized_map = for {key, val} <- tumap do
{key, Jason.encode!(val)}
end
|> Enum.into(%{})
{:ok, serialized_map}
end
def dump(_), do: :error
end