fp-lab4/lib/exdns/http/codec.ex
2026-01-13 18:26:26 +03:00

32 lines
818 B
Elixir

defmodule Exdns.HttpCodec do
@moduledoc false
alias Exdns.HttpCodec.Record
def name_from_string(name) do
name
|> String.trim(".")
|> String.split(".", trim: true)
end
def name_to_string(labels) when is_list(labels), do: Enum.join(labels, ".")
def decode_records(%{"records" => records}, zone_name) when is_list(records) do
records
|> Enum.reduce_while([], fn record, acc ->
case Record.decode(record, zone_name) do
{:ok, rr} -> {:cont, [rr | acc]}
{:error, reason} -> {:halt, {:error, reason}}
end
end)
|> case do
{:error, _} = error -> error
list -> {:ok, Enum.reverse(list)}
end
end
def decode_records(_, _zone_name), do: {:error, "invalid_body"}
def encode_records(records), do: Enum.map(records, &Record.encode/1)
end