purescript-httpurple/docs/Examples/PathSegments/Main.purs
2022-05-22 12:34:27 +01:00

43 lines
1.7 KiB
Haskell

module Examples.PathSegments.Main where
import Prelude hiding ((/))
import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe(..))
import Effect.Console (log)
import HTTPure (Request, ResponseM, ServerM, ok, serve)
import HTTPure (Request, ResponseM, ServerM, ok, serve)
import Routing.Duplex (RouteDuplex')
import Routing.Duplex as RD
import Routing.Duplex.Generic as G
import Routing.Duplex.Generic.Syntax ((/))
data Route = Segment String | ManySegments (Array String)
derive instance Generic Route _
route :: RouteDuplex' Route
route = RD.root $ G.sum
{ "Segment": "segment" / RD.segment
, "ManySegments": RD.many RD.segment :: RD.RouteDuplex' (Array String)
}
-- | Specify the routes
router :: Request Route -> ResponseM
router { route: Segment elem } = ok elem
router { route: ManySegments elems } = ok $ show elems
-- | Boot up the server
main :: ServerM
main =
serve 8080 { route, router, notFoundHandler: Nothing } do
log " ┌───────────────────────────────────────────────┐"
log " │ Server now up on port 8080 │"
log " │ │"
log " │ To test, run: │"
log " │ > curl localhost:8080/segment/<anything> │"
log " │ # => <anything> │"
log " │ > curl localhost:8080/<anything>/<else>/... │"
log " │ # => [ <anything>, <else>, ... ] │"
log " └───────────────────────────────────────────────┘"