defmodule Systemd.DBus.Signature do
@moduledoc false
@supported_complex_signatures MapSet.new([
"a(ssssssouso)",
"a(ss)",
"a(usssoo)",
"a{sv}",
"a(sv)",
"a(sa(sv))",
"ssa(sv)a(sa(sv))"
])
@doc false
@spec supported?(String.t()) :: boolean()
def supported?(signature) when is_binary(signature) do
primitive?(signature) or MapSet.member?(@supported_complex_signatures, signature)
end
defp primitive?(""), do: true
defp primitive?(signature) do
signature
|> String.to_charlist()
|> Enum.all?(&(&1 in ~c"syobintqxuagdvh"))
end
end