defmodule Extreme.Request do alias Extreme.Tools require Logger def prepare(:ping = cmd) do correlation_id = Tools.gen_uuid() res = <> <> correlation_id size = byte_size(res) <> <> res end def prepare(:heartbeat_response = cmd, correlation_id) do res = <> <> correlation_id size = byte_size(res) <> <> res end def prepare(protobuf_msg, credentials, correlation_id \\ Tools.gen_uuid()) do cmd = protobuf_msg.__struct__ data = protobuf_msg.__struct__.encode(protobuf_msg) message = to_binary(cmd, correlation_id, {credentials.user, credentials.pass}, data) {message, correlation_id} end defp to_binary(cmd, correlation_id, {login, password}, data) do login_len = byte_size(login) pass_len = byte_size(password) res = <> <> correlation_id <> <> res = res <> login <> <> <> password <> data size = byte_size(res) <> <> res end end