defmodule ExMobileDevice.Plist do
@moduledoc false
def encode(data), do: to_plist(data)
def decode(<<"bplist00", _::binary>> = data), do: Elixir.Pealist.decode(data)
def decode(data), do: Pealist.decode(data)
defp to_plist(v) do
[~s(), to_plist_value(v), ""]
end
defp to_plist_value(dict) when is_map(dict) do
entries =
Enum.reduce(dict, [], fn {k, v}, iodata ->
[iodata, "#{k}", to_plist_value(v)]
end)
["", entries, ""]
end
defp to_plist_value({:data, v}) when is_binary(v), do: "#{Base.encode64(v)}"
defp to_plist_value(v) when is_binary(v), do: "#{v}"
defp to_plist_value(v) when is_integer(v), do: "#{v}"
defp to_plist_value(true), do: ""
defp to_plist_value(false), do: ""
end