Packages

An easy to use, high performance framework to quickly build APIs for the Gleam programming language

Current section

Files

Jump to
glace src glace@internal@glace_router.erl
Raw

src/glace@internal@glace_router.erl

-module(glace@internal@glace_router).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([get/3, post/3, match_route/2]).
-file("/home/ram/code/gleam/glace/src/glace/internal/glace_router.gleam", 8).
-spec get(
glace@internal@glace_types:glace_builder(QPV),
binary(),
fun((glace@internal@glace_types:request(QPV)) -> gleam@http@response:response(mist:response_data()))
) -> glace@internal@glace_types:glace_builder(QPV).
get(Builder, Path, Handler) ->
Route = {route, get, Path, Handler},
_record = Builder,
{glace_builder,
erlang:element(2, _record),
lists:append(erlang:element(3, Builder), [Route]),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record)}.
-file("/home/ram/code/gleam/glace/src/glace/internal/glace_router.gleam", 21).
-spec post(
glace@internal@glace_types:glace_builder(QQA),
binary(),
fun((glace@internal@glace_types:request(QQA)) -> gleam@http@response:response(mist:response_data()))
) -> glace@internal@glace_types:glace_builder(QQA).
post(Builder, Path, Handler) ->
Route = {route, post, Path, Handler},
_record = Builder,
{glace_builder,
erlang:element(2, _record),
lists:append(erlang:element(3, Builder), [Route]),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record)}.
-file("/home/ram/code/gleam/glace/src/glace/internal/glace_router.gleam", 34).
-spec match_route(
glace@internal@glace_types:request(QQF),
list(glace@internal@glace_types:route(QQF))
) -> {ok, gleam@http@response:response(mist:response_data())} | {error, nil}.
match_route(Request, Routes) ->
Allowed_routes = begin
_pipe = Routes,
gleam@list:filter(
_pipe,
fun(Route) ->
erlang:element(2, Route) =:= erlang:element(2, Request)
end
)
end,
Allowed_route_paths = begin
_pipe@1 = Allowed_routes,
gleam@list:map(_pipe@1, fun(Route@1) -> erlang:element(3, Route@1) end)
end,
case pathern:match_patterns(erlang:element(8, Request), Allowed_route_paths) of
{ok, Pattern} ->
case begin
_pipe@2 = Allowed_routes,
gleam@list:find(
_pipe@2,
fun(Route@2) ->
erlang:element(3, Route@2) =:= erlang:element(
3,
Pattern
)
end
)
end of
{ok, Route@3} ->
Request@1 = begin
_record = Request,
{request,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record),
erlang:element(7, _record),
erlang:element(8, _record),
erlang:element(9, _record),
erlang:element(4, Pattern),
erlang:element(11, _record),
erlang:element(12, _record)}
end,
{ok, (erlang:element(4, Route@3))(Request@1)};
{error, nil} ->
{error, nil}
end;
{error, _} ->
{error, nil}
end.