git.iko.soy/purestack-dev/purescript-purestack-server
on master help sign in
Nested routes
8935650iko
spago.dhall+1
@@ -16,6 +16,7 @@
16 , "prelude"
16 , "prelude"
17 , "record"
17 , "record"
18 , "run"
18 , "run"
19+ , "strings"
19 , "transformers"
20 , "transformers"
20 , "tuples"
21 , "tuples"
21 , "typelevel-prelude"
22 , "typelevel-prelude"
src/Main.purs+5
@@ -18,6 +18,10 @@ type Foo = { a :: String, b :: Maybe Int, c :: Array Number }
18type API =
18type API =
19 ( foo :: "foo" / "bar" / Foo / GET { a :: Int, b :: Number, c :: Foo }
19 ( foo :: "foo" / "bar" / Foo / GET { a :: Int, b :: Number, c :: Foo }
20 , bar :: "foo" / "qux" / POST Unit { a :: Int }
20 , bar :: "foo" / "qux" / POST Unit { a :: Int }
21+ , deep ::
22+ "deep" /
23+ ( something :: "something" / GET { a :: String }
24+ )
21 )
25 )
22
26
23main :: Effect Unit
27main :: Effect Unit
@@ -26,4 +30,5 @@ main = do
26 Bun.serve $ Server.run @API identity
30 Bun.serve $ Server.run @API identity
27 { foo: \x -> pure { a: 1, b: 1.0, c: x }
31 { foo: \x -> pure { a: 1, b: 1.0, c: x }
28 , bar: pure { a: 8 }
32 , bar: pure { a: 8 }
33+ , deep: { something: pure { a: "something" } }
29 }
34 }
src/PureStack/Server.purs+8
@@ -248,6 +248,14 @@ else instance (FromRequest req, ToResponse resp) => ServeRoute (PATCH req resp)
248 resp <- nt $ handler r
248 resp <- nt $ handler r
249 pure $ toResponse resp
249 pure $ toResponse resp
250
250
251+else instance
252+ ( ServeAPI routes list handlers m
253+ , RowToList routes list
254+ ) =>
255+ ServeRoute routes (Record handlers) m where
256+ serveRoute route = pure $ \nt handlers req ->
257+ serveAPI @routes @list nt handlers route req
258+
251class ServeQuery :: Row Type -> RowList Type -> Constraint
259class ServeQuery :: Row Type -> RowList Type -> Constraint
252class ServeQuery row list | list -> row where
260class ServeQuery row list | list -> row where
253 serveQuery :: Map String (Array String) -> Maybe (Builder (Record ()) (Record row))
261 serveQuery :: Map String (Array String) -> Maybe (Builder (Record ()) (Record row))