Packages

A simple Google Cloud Platform compliant logging library for Gleam!

Current section

Files

Jump to
gclog src gclog@entry.erl
Raw

src/gclog@entry.erl

-module(gclog@entry).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new/2, with_labels/2, with_trace/2, with_span_id/2, with_trace_sampled/2, with_source_location/4, to_json/1]).
-export_type([source_location/0, trace/0, entry/0]).
-type source_location() :: {source_location,
gleam@option:option(binary()),
gleam@option:option(integer()),
gleam@option:option(binary())}.
-type trace() :: {trace, binary(), binary()}.
-type entry() :: {entry,
gclog@severity:severity(),
gleam@json:json(),
gleam@option:option(gleam@dict:dict(binary(), binary())),
gleam@option:option(trace()),
gleam@option:option(binary()),
gleam@option:option(boolean()),
gleam@option:option(source_location())}.
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 18).
-spec source_location_serializer(source_location()) -> gleam@json:json().
source_location_serializer(S) ->
gleam@json:object(
[{<<"file"/utf8>>,
gleam@json:nullable(
erlang:element(2, S),
fun gleam@json:string/1
)},
{<<"line"/utf8>>,
gleam@json:nullable(
gleam@option:map(
erlang:element(3, S),
fun(Line) -> erlang:integer_to_binary(Line) end
),
fun gleam@json:string/1
)},
{<<"function"/utf8>>,
gleam@json:nullable(
erlang:element(4, S),
fun gleam@json:string/1
)}]
).
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 32).
-spec labels_serializer(gleam@dict:dict(binary(), binary())) -> gleam@json:json().
labels_serializer(Labels) ->
As_serializable = fun(Kv) ->
{K, V} = Kv,
{K, gleam@json:string(V)}
end,
_pipe = maps:to_list(Labels),
_pipe@1 = gleam@list:map(_pipe, As_serializable),
gleam@json:object(_pipe@1).
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 49).
-spec trace_serializer(trace()) -> gleam@json:json().
trace_serializer(T) ->
gleam@json:string(
<<<<<<"projects/"/utf8, (erlang:element(2, T))/binary>>/binary,
"/traces/"/utf8>>/binary,
(erlang:element(3, T))/binary>>
).
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 67).
-spec new(gclog@severity:severity(), gleam@json:json()) -> entry().
new(Severity, Message) ->
{entry, Severity, Message, none, none, none, none, none}.
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 80).
-spec with_labels(entry(), gleam@dict:dict(binary(), binary())) -> entry().
with_labels(Entry, Labels) ->
erlang:setelement(4, Entry, {some, Labels}).
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 85).
-spec with_trace(entry(), trace()) -> entry().
with_trace(Entry, Trace) ->
erlang:setelement(5, Entry, {some, Trace}).
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 90).
-spec with_span_id(entry(), binary()) -> entry().
with_span_id(Entry, Span_id) ->
erlang:setelement(6, Entry, {some, Span_id}).
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 95).
-spec with_trace_sampled(entry(), boolean()) -> entry().
with_trace_sampled(Entry, Trace_sampled) ->
erlang:setelement(7, Entry, {some, Trace_sampled}).
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 100).
-spec with_source_location(entry(), integer(), binary(), binary()) -> entry().
with_source_location(Entry, Lineno, Fileloc, Func) ->
erlang:setelement(
8,
Entry,
{some, {source_location, {some, Fileloc}, {some, Lineno}, {some, Func}}}
).
-file("/home/sam/dev/personal/gclog/src/gclog/entry.gleam", 117).
-spec to_json(entry()) -> gleam@json:json().
to_json(Entry) ->
Message = [{<<"severity"/utf8>>,
gleam@json:string(
gclog@severity:to_string(erlang:element(2, Entry))
)},
{<<"message"/utf8>>, erlang:element(3, Entry)}],
Message@1 = case erlang:element(4, Entry) of
{some, Labels} ->
[{<<"logging.googleapis.com/labels"/utf8>>,
labels_serializer(Labels)} |
Message];
none ->
Message
end,
Message@2 = case erlang:element(5, Entry) of
{some, Trace} ->
[{<<"logging.googleapis.com/trace"/utf8>>, trace_serializer(Trace)} |
Message@1];
none ->
Message@1
end,
Message@3 = case erlang:element(6, Entry) of
{some, Span_id} ->
[{<<"logging.googleapis.com/spanId"/utf8>>,
gleam@json:string(Span_id)} |
Message@2];
none ->
Message@2
end,
Message@4 = case erlang:element(7, Entry) of
{some, Ts} ->
[{<<"logging.googleapis.com/trace_sampled"/utf8>>,
gleam@json:bool(Ts)} |
Message@3];
none ->
Message@3
end,
Message@5 = case erlang:element(8, Entry) of
{some, Sl} ->
[{<<"logging.googleapis.com/sourceLocation"/utf8>>,
source_location_serializer(Sl)} |
Message@4];
none ->
Message@4
end,
gleam@json:object(Message@5).