Current section

Files

Jump to
kafe src kafe_protocol_api_versions.erl
Raw

src/kafe_protocol_api_versions.erl

% @hidden
-module(kafe_protocol_api_versions).
-compile([{parse_transform, lager_transform}]).
-include("../include/kafe.hrl").
-define(MAX_VERSION, 0).
-export([
run/0,
request/1,
response/2
]).
run() ->
kafe_protocol:run(
?API_VERSIONS_REQUEST,
?MAX_VERSION,
fun ?MODULE:request/1,
fun ?MODULE:response/2).
% ApiVersions Request (Version: 0) =>
request(State) ->
kafe_protocol:request(<<>>, State).
% ApiVersions Response (Version: 0) => error_code [api_versions]
% error_code => INT16
% api_versions => api_key min_version max_version
% api_key => INT16
% min_version => INT16
% max_version => INT16
response(<<
ErrorCode:16/signed,
ApiVersionsLen:32/signed,
ApiVersions/binary
>>,
_State) ->
{ok, #{error_code => kafe_error:code(ErrorCode),
api_versions => api_versions(ApiVersionsLen, ApiVersions, [])}}.
api_versions(0, _, Acc) ->
Acc;
api_versions(N, <<
ApiKey:16/signed,
MinVersion:16/signed,
MaxVersion:16/signed,
Remainder/binary
>>, Acc) ->
api_versions(N - 1,
Remainder,
[#{api_key => ApiKey,
min_version => MinVersion,
max_version => MaxVersion}|Acc]).