Update HTTPure to routing duplex

This commit is contained in:
sigma-andex
2022-05-22 12:30:14 +01:00
parent 24197a474a
commit 9a8f34cf73
19 changed files with 390 additions and 166 deletions

View File

@@ -2,20 +2,35 @@ module Examples.QueryParameters.Main where
import Prelude
import Effect.Console (log)
import HTTPure (Request, ResponseM, ServerM, ok, serve, (!?), (!@))
import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe(..))
import Effect.Class.Console (log)
import HTTPure (Request, ResponseM, ServerM, notFound, ok, serve)
import Routing.Duplex (RouteDuplex')
import Routing.Duplex as RD
import Routing.Duplex.Generic as G
data Route = Route { foo :: Boolean, bar :: Maybe String, baz :: Maybe String }
derive instance Generic Route _
route :: RouteDuplex' Route
route = RD.root $ G.sum
{ "Route": RD.params { foo: RD.flag <<< RD.string, bar: RD.optional <<< RD.string, baz: RD.optional <<< RD.string }
}
-- | Specify the routes
router :: Request -> ResponseM
router { query }
| query !? "foo" = ok "foo"
| query !@ "bar" == "test" = ok "bar"
| otherwise = ok $ query !@ "baz"
router :: Request Route -> ResponseM
router { route: (Route { foo: true }) } = ok "foo"
router { route: (Route { bar: Just "test" }) } = ok "bar"
router { route: (Route { bar: Just _ }) } = ok ""
router { route: Route { baz: Just baz } } = ok $ baz
router _ = notFound
-- | Boot up the server
main :: ServerM
main =
serve 8080 router do
serve 8080 { route, router, notFoundHandler: Nothing } do
log " ┌───────────────────────────────────────┐"
log " │ Server now up on port 8080 │"
log " │ │"