Current section
Files
Jump to
Current section
Files
src/gleatter@body.erl
-module(gleatter@body).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([empty_body/0, json_body/2, string_body/1, encode/2, decode/2, get_type/1]).
-export_type([body_type/0, body_converter/1, route_body/1]).
-type body_type() :: empty_body | string_body | json_body.
-type body_converter(IHX) :: {body_converter,
fun((IHX) -> gleam@string_tree:string_tree()),
fun((binary()) -> {ok, IHX} | {error, gleatter:gleatter_error()})}.
-opaque route_body(IHY) :: {route_body, body_type(), body_converter(IHY)}.
-file("/home/runner/work/gleatter/gleatter/src/gleatter/body.gleam", 30).
-spec empty_body() -> route_body(nil).
empty_body() ->
{route_body,
empty_body,
{body_converter,
fun(_) -> gleam@string_builder:new() end,
fun(_) -> {ok, nil} end}}.
-file("/home/runner/work/gleatter/gleatter/src/gleatter/body.gleam", 42).
-spec json_body(
fun((IIA) -> gleam@json:json()),
fun((gleam@dynamic:dynamic_()) -> {ok, IIA} |
{error, list(gleam@dynamic:decode_error())})
) -> route_body(IIA).
json_body(Encoder, Decoder) ->
{route_body, json_body, {body_converter, fun(Value) -> _pipe = Value,
_pipe@1 = Encoder(_pipe),
gleam@json:to_string_builder(_pipe@1) end, fun(Body) ->
_pipe@2 = gleam@json:decode(Body, Decoder),
gleam@result:map_error(
_pipe@2,
fun(Err) -> {json_decode_error, Err} end
)
end}}.
-file("/home/runner/work/gleatter/gleatter/src/gleatter/body.gleam", 60).
-spec string_body(body_converter(IIF)) -> route_body(IIF).
string_body(Converter) ->
{route_body, string_body, Converter}.
-file("/home/runner/work/gleatter/gleatter/src/gleatter/body.gleam", 65).
-spec encode(route_body(III), III) -> gleam@string_tree:string_tree().
encode(Body, Value) ->
_pipe = Value,
(erlang:element(2, erlang:element(3, Body)))(_pipe).
-file("/home/runner/work/gleatter/gleatter/src/gleatter/body.gleam", 70).
-spec decode(route_body(IIK), binary()) -> {ok, IIK} |
{error, gleatter:gleatter_error()}.
decode(Body, Value) ->
_pipe = Value,
(erlang:element(3, erlang:element(3, Body)))(_pipe).
-file("/home/runner/work/gleatter/gleatter/src/gleatter/body.gleam", 78).
-spec get_type(route_body(any())) -> body_type().
get_type(Body) ->
erlang:element(2, Body).