Packages
mist
0.4.2
6.0.3
6.0.2
6.0.1
6.0.0
5.0.4
5.0.3
5.0.2
5.0.1
5.0.0
5.0.0-rc1
4.0.7
4.0.6
4.0.5
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.0.0
1.2.0
1.1.0
1.0.0
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.17.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
a misty Gleam web server
Current section
Files
Jump to
Current section
Files
src/mist@encoder.erl
-module(mist@encoder).
-compile(no_auto_import).
-export([to_bit_builder/1, response_builder/2, status_to_bit_string/1, encode_headers/1]).
-spec to_bit_builder(
gleam@http@response:response(gleam@bit_builder:bit_builder())
) -> gleam@bit_builder:bit_builder().
to_bit_builder(Resp) ->
Body_size = gleam@bit_builder:byte_size(erlang:element(4, Resp)),
Headers = begin
_pipe = gleam@map:from_list(
[{<<"content-type"/utf8>>, <<"text/plain; charset=utf-8"/utf8>>},
{<<"content-length"/utf8>>, gleam@int:to_string(Body_size)},
{<<"connection"/utf8>>, <<"keep-alive"/utf8>>}]
),
gleam@list:fold(
erlang:element(3, Resp),
_pipe,
fun(Defaults, Tup) ->
{Key, Value} = Tup,
gleam@map:insert(Defaults, Key, Value)
end
)
end,
Body_builder = case Body_size of
0 ->
gleam@bit_builder:new();
_@1 ->
_pipe@1 = gleam@bit_builder:new(),
_pipe@2 = gleam@bit_builder:append_builder(
_pipe@1,
erlang:element(4, Resp)
),
gleam@bit_builder:append(_pipe@2, <<"\r\n"/utf8>>)
end,
_pipe@3 = erlang:element(2, Resp),
_pipe@4 = response_builder(_pipe@3, gleam@map:to_list(Headers)),
gleam@bit_builder:append_builder(_pipe@4, Body_builder).
-spec response_builder(integer(), list({binary(), binary()})) -> gleam@bit_builder:bit_builder().
response_builder(Status, Headers) ->
Status_string = begin
_pipe = Status,
_pipe@1 = gleam@int:to_string(_pipe),
_pipe@2 = gleam@bit_builder:from_string(_pipe@1),
_pipe@3 = gleam@bit_builder:append(_pipe@2, <<" "/utf8>>),
gleam@bit_builder:append(_pipe@3, status_to_bit_string(Status))
end,
_pipe@4 = gleam@bit_builder:new(),
_pipe@5 = gleam@bit_builder:append(_pipe@4, <<"HTTP/1.1 "/utf8>>),
_pipe@6 = gleam@bit_builder:append_builder(_pipe@5, Status_string),
_pipe@7 = gleam@bit_builder:append(_pipe@6, <<"\r\n"/utf8>>),
_pipe@8 = gleam@bit_builder:append_builder(_pipe@7, encode_headers(Headers)),
gleam@bit_builder:append(_pipe@8, <<"\r\n"/utf8>>).
-spec status_to_bit_string(integer()) -> bitstring().
status_to_bit_string(Status) ->
case Status of
101 ->
<<"Switching Protocols"/utf8>>;
200 ->
<<"Ok"/utf8>>;
201 ->
<<"Created"/utf8>>;
202 ->
<<"Accepted"/utf8>>;
204 ->
<<"No Content"/utf8>>;
301 ->
<<"Moved Permanently"/utf8>>;
400 ->
<<"Bad Request"/utf8>>;
401 ->
<<"Unauthorized"/utf8>>;
403 ->
<<"Forbidden"/utf8>>;
404 ->
<<"Not Found"/utf8>>;
405 ->
<<"Method Not Allowed"/utf8>>;
500 ->
<<"Internal Server Error"/utf8>>;
502 ->
<<"Bad Gateway"/utf8>>;
503 ->
<<"Service Unavailable"/utf8>>;
504 ->
<<"Gateway Timeout"/utf8>>
end.
-spec encode_headers(list({binary(), binary()})) -> gleam@bit_builder:bit_builder().
encode_headers(Headers) ->
gleam@list:fold(
Headers,
gleam@bit_builder:new(),
fun(Builder, Tup) ->
{Header, Value} = Tup,
_pipe = Builder,
_pipe@1 = gleam@bit_builder:append_string(_pipe, Header),
_pipe@2 = gleam@bit_builder:append(_pipe@1, <<": "/utf8>>),
_pipe@3 = gleam@bit_builder:append_string(_pipe@2, Value),
gleam@bit_builder:append(_pipe@3, <<"\r\n"/utf8>>)
end
).