Files
phoenix-ausblick/lib/outlook/articles/internal_tree.ex
Thelonius Kort b7bd9195b6 Add importing html and save it to Article
Additionally defines a wizard logic which is partially unused yet.
2022-12-29 16:43:52 +01:00

53 lines
1.2 KiB
Elixir

defmodule Outlook.Articles.InternalTree do
use Ecto.Type
alias Outlook.InternalTree.InternalNode
alias Outlook.InternalTree.TranslationUnit
def type, do: :string
def cast(tree) when is_list(tree) do
{:ok, tree}
end
def cast(_), do: :error
def load(tree) when is_binary(tree) do
{:ok, Jason.decode!(tree, keys: :atoms!) |> from_json}
end
def dump(tree) when is_list(tree), do: {:ok, Jason.encode!(tree)}
def dump(_), do: :error
defp from_json([%{status: _} = node | rest]) do
[ %TranslationUnit{
status: String.to_atom(node.status),
uuid: node.uuid,
content: node.content
} | from_json(rest) ]
end
defp from_json([%{type: "element"} = node | rest]) do
[ %InternalNode{
name: node.name,
attributes: node.attributes,
type: String.to_atom(node.type),
uuid: node.uuid,
content: from_json(node.content)
} | from_json(rest) ]
end
defp from_json([%{type: _} = node | rest]) do
[ %InternalNode{
name: node.name,
attributes: node.attributes,
type: String.to_atom(node.type),
uuid: node.uuid,
content: node.content
} | from_json(rest) ]
end
defp from_json([]), do: []
end