nero-0.3.1: Lens-based HTTP toolkit

Safe HaskellSafe
LanguageHaskell2010

Nero.Application

Contents

Synopsis

Server

class Server a where Source

Ultimately any valid Nero server application must be transformed Request -> IO Response. This type class facilitates the creation of web server handling Nero applications.

Trailing slash redirection

slashRedirect Source

Arguments

:: (Target a, HasUrl r, HasPath r) 
=> Prism' Match Match 
-> (a -> Response)

What to respond upon matching.

-> r 
-> Maybe Response 

Redirect with slash appended URL if only a trailing slash is needed for successful matching, otherwise it responds normally.

>>> let mkRequest p = dummyRequest & host .~ "example.com" & path .~ p
>>> let respond name = ok $ "<h1>Hello " <> name <> "</h1>"
>>> let app = slashRedirect (prefixed "/hello/" . suffixed "/") respond :: Request -> Maybe Response
>>> app (mkRequest "/hello/there") <&> status
Just "301 Moved Permanently"
>>> app (mkRequest "/hello/there") >>= preview location <&> render
Just "http://example.com/hello/there/"
>>> app (mkRequest "/hello/there/") <&> status
Just "200 OK"
>>> app (mkRequest "/hello/there/") <&> body
Just "<h1>Hello there</h1>"
>>> app $ mkRequest "/bye/"
Nothing