Создание собственной библиотеки кодирования и декодирования XDR не сложно.
Кодирование терминов Эрланга в XDR тривиально:
%% @spec push_bool(bool()) -> binary()
push_bool(Value) ->
case Value of
true ->
<<0, 0, 0, 1>>;
false ->
<<0, 0, 0, 0>>
end.
Путь в другую сторону немного более многословен, в зависимости от того, как вы хотели бы, чтобы создавалась система отчетов об ошибках. Я выбрал исключения:
%% @spec pull_bool(binary()) -> {bool(), binary()}
pull_bool(Bin) ->
{Value, Tail} =
try
<<0, 0, 0, V, T/binary>> = Bin,
{V, T}
catch
error:{badmatch, _} ->
throw({xdr_error, "Invalid boolean value"})
end,
Result = case Value of
0 -> false;
1 -> true;
_ -> throw({xdr_error, "Invalid boolean value"})
end,
{Result, Tail}.
В действительности не так уж много типов данных XDR, поэтому, возможно, всего будет несколько сотен строк кода.