Current section
Files
Jump to
Current section
Files
lib/message_template.ex
defmodule DBux.MessageTemplate do
@moduledoc """
This module contains helper functions that can be used to easily build
well-known messages.
"""
@doc """
Builds standard method call to org.freedesktop.DBus.Hello.
"""
@spec hello(DBux.Serial.t) :: %DBux.Message{}
def hello(serial \\ 0) when is_number(serial) do
DBux.Message.build_method_call("/org/freedesktop/DBus", "org.freedesktop.DBus", "Hello", [], "org.freedesktop.DBus", serial)
end
@doc """
Builds standard method call to org.freedesktop.DBus.RequestName.
"""
@spec request_name(String.t, number, DBux.Serial.t) :: %DBux.Message{}
def request_name(name, flags \\ 0, serial \\ 0) when is_number(serial) and is_binary(name) and is_number(flags) do
DBux.Message.build_method_call("/org/freedesktop/DBus", "org.freedesktop.DBus", "RequestName", [
%DBux.Value{type: :string, value: name},
%DBux.Value{type: :uint32, value: flags}
], "org.freedesktop.DBus", serial)
end
@doc """
Builds standard method call to org.freedesktop.DBus.AddMatch.
"""
@spec add_match(DBux.Message.message_type, String.t, String.t, String.t, String.t, String.t, String.t, [] | [String.t], [] | [String.t], String.t, boolean, DBux.Serial.t) :: %DBux.Message{}
def add_match(type \\ nil, sender \\ nil, interface \\ nil, member \\ nil, path \\ nil, path_namespace \\ nil, destination \\ nil, string_matches \\ [], path_matches \\ [], arg0namespace \\ nil, eavesdrop \\ nil, serial \\ 0) when is_number(serial) do
filter = []
filter = if !is_nil(type), do: filter ++ ["type='#{type}'"], else: filter
filter = if !is_nil(sender), do: filter ++ ["sender='#{sender}'"], else: filter
filter = if !is_nil(interface), do: filter ++ ["interface='#{interface}'"], else: filter
filter = if !is_nil(member), do: filter ++ ["member='#{member}'"], else: filter
filter = if !is_nil(path), do: filter ++ ["path='#{path}'"], else: filter
filter = if !is_nil(path_namespace), do: filter ++ ["path_namespace='#{path_namespace}'"], else: filter
filter = if !is_nil(destination), do: filter ++ ["destination='#{destination}'"], else: filter
filter = if !is_nil(arg0namespace), do: filter ++ ["arg0namespace='#{arg0namespace}'"], else: filter
filter = if !is_nil(eavesdrop), do: filter ++ ["eavesdrop='#{eavesdrop}'"], else: filter
# TODO add string escaping
# TODO add support for string_matches
# TODO add support for path_matches
DBux.Message.build_method_call("/org/freedesktop/DBus", "org.freedesktop.DBus", "AddMatch", [
%DBux.Value{type: :string, value: Enum.join(filter, ",")},
], "org.freedesktop.DBus", serial)
end
end