Current section
Files
Jump to
Current section
Files
src/glimt@serializer@json.erl
-module(glimt@serializer@json).
-compile([no_auto_import, nowarn_unused_vars]).
-export([builder/0, add_standard_log_message/1, add_data/2, add_context/2, build/1, new_json_serializer/0]).
-spec builder() -> fun((glimt@log_message:log_message(any(), any(), any())) -> list({binary(),
gleam@json:json()})).
builder() ->
fun(_) -> [] end.
-spec add_standard_log_message(
fun((glimt@log_message:log_message(IGG, IGH, IGI)) -> list({binary(),
gleam@json:json()}))
) -> fun((glimt@log_message:log_message(IGG, IGH, IGI)) -> list({binary(),
gleam@json:json()})).
add_standard_log_message(Builder) ->
fun(Log_message) ->
Standard_spec = [{<<"time"/utf8>>,
gleam@json:string(erlang:element(2, Log_message))},
{<<"name"/utf8>>, gleam@json:string(erlang:element(3, Log_message))},
{<<"pid"/utf8>>,
gleam@json:string(
gleam@erlang:format(erlang:element(4, Log_message))
)},
{<<"instance_name"/utf8>>,
gleam@json:nullable(
erlang:element(5, Log_message),
fun(Instance_name) -> gleam@json:string(Instance_name) end
)},
{<<"instance_pid"/utf8>>,
gleam@json:nullable(
erlang:element(6, Log_message),
fun(Instance_pid) ->
gleam@json:string(gleam@erlang:format(Instance_pid))
end
)},
{<<"level"/utf8>>,
gleam@json:string(
glimt@log_message:level_string(
erlang:element(7, Log_message)
)
)},
{<<"message"/utf8>>,
gleam@json:string(erlang:element(9, Log_message))},
{<<"error"/utf8>>,
gleam@json:nullable(
erlang:element(10, Log_message),
fun(Error) ->
gleam@json:string(gleam@string:inspect(Error))
end
)}],
Previous_spec = Builder(Log_message),
gleam@list:append(Previous_spec, Standard_spec)
end.
-spec add_data(
fun((glimt@log_message:log_message(IGP, IGQ, IGR)) -> list({binary(),
gleam@json:json()})),
fun((IGP) -> gleam@json:json())
) -> fun((glimt@log_message:log_message(IGP, IGQ, IGR)) -> list({binary(),
gleam@json:json()})).
add_data(Builder, Data_serializer) ->
fun(Log_message) ->
Previous_spec = Builder(Log_message),
Data_spec = case erlang:element(11, Log_message) of
{some, Data} ->
[{<<"data"/utf8>>, Data_serializer(Data)}];
none ->
[]
end,
gleam@list:append(Previous_spec, Data_spec)
end.
-spec add_context(
fun((glimt@log_message:log_message(IGY, IGZ, IHA)) -> list({binary(),
gleam@json:json()})),
fun((IGZ) -> gleam@json:json())
) -> fun((glimt@log_message:log_message(IGY, IGZ, IHA)) -> list({binary(),
gleam@json:json()})).
add_context(Builder, Context_serializer) ->
fun(Log_message) ->
Previous_spec = Builder(Log_message),
Context_spec = case erlang:element(12, Log_message) of
{some, Context} ->
[{<<"context"/utf8>>, Context_serializer(Context)}];
none ->
[]
end,
gleam@list:append(Previous_spec, Context_spec)
end.
-spec build(
fun((glimt@log_message:log_message(IHH, IHI, IHJ)) -> list({binary(),
gleam@json:json()}))
) -> fun((glimt@log_message:log_message(IHH, IHI, IHJ)) -> binary()).
build(Builder) ->
fun(Log_message) ->
_pipe = gleam@json:object(Builder(Log_message)),
gleam@json:to_string(_pipe)
end.
-spec new_json_serializer() -> fun((glimt@log_message:log_message(any(), any(), any())) -> binary()).
new_json_serializer() ->
_pipe = builder(),
_pipe@1 = add_standard_log_message(_pipe),
build(_pipe@1).