Packages

An Elixir library (driver) for clients communicating with MQTT brokers(via the MQTT 3.1.1 protocol).

Current section

Files

Jump to
hulaaki lib hulaaki.ex
Raw

lib/hulaaki.ex

defmodule Hulaaki do
alias Hulaaki.Message
alias Hulaaki.Encoder
alias Hulaaki.Decoder
@moduledoc """
Defines Packet protocol and provides implementations for Hulaaki Messages
"""
defprotocol Packet do
@moduledoc """
Defines the protocol Packet to encode/decode a Hulaaki Message
"""
@doc """
Should implement the encoding of a Message struct to binary
"""
def encode(message)
@doc """
Should implement the decoding of a binary to Message struct
"""
def decode(message)
end
defimpl Packet, for: BitString do
def encode(binary), do: binary
def decode(binary) do
Decoder.decode(binary)
end
end
defimpl Packet, for: Message.Connect do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message) <>
Encoder.encode_payload(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.ConnAck do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.Publish do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message) <>
Encoder.encode_payload(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.PubAck do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.PubRec do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.PubRel do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.PubComp do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.Subscribe do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message) <>
Encoder.encode_payload(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.SubAck do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message) <>
Encoder.encode_payload(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.Unsubscribe do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message) <>
Encoder.encode_payload(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.UnsubAck do
def encode(message) do
Encoder.encode_fixed_header(message) <>
Encoder.encode_variable_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.PingReq do
def encode(message) do
Encoder.encode_fixed_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.PingResp do
def encode(message) do
Encoder.encode_fixed_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
defimpl Packet, for: Message.Disconnect do
def encode(message) do
Encoder.encode_fixed_header(message)
end
def decode(message), do: %{message: message, remainder: <<>>}
end
end