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