Current section

Files

Jump to
opentelemetry_api src otel_utils.erl
Raw

src/otel_utils.erl

%%%------------------------------------------------------------------------
%% Copyright 2021, OpenTelemetry Authors
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%
%% @private
%%%-----------------------------------------------------------------------
-module(otel_utils).
-export([format_exception/3,
format_binary_string/2,
format_binary_string/3,
assert_to_binary/1,
unicode_to_binary/1]).
-if(?OTP_RELEASE >= 24).
format_exception(Kind, Reason, StackTrace) ->
erl_error:format_exception(Kind, Reason, StackTrace).
-else.
format_exception(Kind, Reason, StackTrace) ->
io_lib:format("~p:~p ~p", [Kind, Reason, StackTrace]).
-endif.
-spec format_binary_string(io:format(), [term()]) -> {ok, binary()} | {error, bad_binary_conversion}.
format_binary_string(Format, Data) ->
unicode_to_binary(io_lib:format(Format, Data)).
-spec format_binary_string(io:format(), [term()], [{chars_limit, integer()}]) -> {ok, binary()} | {error, bad_binary_conversion}.
format_binary_string(Format, Data, Options) ->
unicode_to_binary(io_lib:format(Format, Data, Options)).
-spec assert_to_binary(unicode:chardata()) -> binary().
assert_to_binary(String) ->
case unicode:characters_to_binary(String) of
Bin when is_binary(Bin) ->
Bin;
_ ->
error({bad_binary_conversion, String})
end.
-spec unicode_to_binary(unicode:chardata()) -> {ok, binary()} | {error, bad_binary_conversion}.
unicode_to_binary(String) ->
case unicode:characters_to_binary(String) of
Bin when is_binary(Bin) ->
{ok, Bin};
_ ->
{error, bad_binary_conversion}
end.