Decodes a binary into a message.
decode(binary, atom) :: {:ok, struct} | {:error, any}
decode!(binary, atom) :: struct | no_return