git.iko.soy/purestack-dev/purescript-purestack-server
on master help sign in
Nested routes
commit893565062563cfd0ee433690a79c1fac430b5553 authoriko <mail@iko.soy> dateFri 6 Jun 2025, 02:21 (1 year ago) parentc0ddf54
3 files changed+14
spago.dhall+1 src/Main.purs+5 src/PureStack/Server.purs+8
spago.dhall+1
@@ -16,6 +16,7 @@
1616 , "prelude"
1717 , "record"
1818 , "run"
19+ , "strings"
1920 , "transformers"
2021 , "tuples"
2122 , "typelevel-prelude"
src/Main.purs+5
@@ -18,6 +18,10 @@ type Foo = { a :: String, b :: Maybe Int, c :: Array Number }
1818type API =
1919 ( foo :: "foo" / "bar" / Foo / GET { a :: Int, b :: Number, c :: Foo }
2020 , bar :: "foo" / "qux" / POST Unit { a :: Int }
21+ , deep ::
22+ "deep" /
23+ ( something :: "something" / GET { a :: String }
24+ )
2125 )
2226
2327main :: Effect Unit
@@ -26,4 +30,5 @@ main = do
2630 Bun.serve $ Server.run @API identity
2731 { foo: \x -> pure { a: 1, b: 1.0, c: x }
2832 , bar: pure { a: 8 }
33+ , deep: { something: pure { a: "something" } }
2934 }
src/PureStack/Server.purs+8
@@ -248,6 +248,14 @@ else instance (FromRequest req, ToResponse resp) => ServeRoute (PATCH req resp)
248248 resp <- nt $ handler r
249249 pure $ toResponse resp
250250
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+
251259class ServeQuery :: Row Type -> RowList Type -> Constraint
252260class ServeQuery row list | list -> row where
253261 serveQuery :: Map String (Array String) -> Maybe (Builder (Record ()) (Record row))