wai-routes-0.6.2: Typesafe URLs for Wai applications.

Copyright(c) Anupam Jain 2013
LicenseMIT (see the file LICENSE)
Maintainerajnsit@gmail.com
Stabilityexperimental
Portabilitynon-portable (uses ghc extensions)
Safe HaskellNone
LanguageHaskell2010

Network.Wai.Middleware.Routes

Contents

Description

This package provides typesafe URLs for Wai applications.

Synopsis

Quasi Quoters

parseRoutes :: QuasiQuoter Source

A quasi-quoter to parse a string into a list of Resources. Checks for overlapping routes, failing if present; use parseRoutesNoCheck to skip the checking. See documentation site for details on syntax.

Parse Routes declared inline

Parse routes declared in a file

parseRoutesNoCheck :: QuasiQuoter Source

Same as parseRoutes, but performs no overlap checking.

Parse routes declared inline, without checking for overlaps

Parse routes declared in a file, without checking for overlaps

Template Haskell methods

mkRoute :: String -> [ResourceTree String] -> Q [Dec] Source

Generates all the things needed for efficient routing, including your application's Route datatype, and RenderRoute, ParseRoute, and RouteAttr instances

Dispatch

routeDispatch :: Routable master => master -> Middleware Source

Generates the application middleware from a Routable master datatype

URL rendering and parsing

showRoute :: RenderRoute master => Route master -> Text Source

Renders a Route as Text

readRoute :: ParseRoute master => Text -> Maybe (Route master) Source

Read a route from Text Returns Nothing if Route reading failed. Just route otherwise

Application Handlers

type Handler master = master -> App master Source

A Handler generates an App from the master datatype

Generated Datatypes

class Routable master where Source

A Routable instance can be used in dispatching. An appropriate instance for your site datatype is automatically generated by mkRoute

Methods

dispatcher :: Handler master Source

Used internally. However needs to be exported for TH to work.

class Eq (Route a) => RenderRoute a where Source

Associated Types

data Route a Source

The type-safe URLs associated with a site argument.

Methods

renderRoute Source

Arguments

:: Route a 
-> ([Text], [(Text, Text)])

The path of the URL split on forward slashes, and a list of query parameters with their associated value.

A RenderRoute instance for your site datatype is automatically generated by mkRoute

class RenderRoute a => ParseRoute a where Source

Methods

parseRoute Source

Arguments

:: ([Text], [(Text, Text)])

The path of the URL split on forward slashes, and a list of query parameters with their associated value.

-> Maybe (Route a) 

A ParseRoute instance for your site datatype is automatically generated by mkRoute

A RouteAttrs instance for your site datatype is automatically generated by mkRoute

Accessing Raw Request Data

data RequestData master Source

An abstract representation of the request data. You can get the wai request object by using waiReq

Extract the wai Request object from RequestData

Extract the next Application in the stack

runNext :: App master Source

Run the next application in the stack

Run the next application in the stack

Route Monad makes it easy to compose routes together

data RouteM a Source

The Route Monad

defaultAction :: Application -> RouteM () Source

Set the default action of the Application. You should only call this once in an application. Subsequent invocations override the previous settings.

Set the default action for a app

middleware :: Middleware -> RouteM () Source

Add a middleware to the application. Middleware is nested so the one declared earlier is outer.

Add another middleware to the app

route :: Routable master => master -> RouteM () Source

Add a route to the application. Routes are ordered so the one declared earlier is matched first.

Add another routed middleware to the app

toWaiApp :: RouteM () -> IO Application Source

Convert a RouteM Monadic value into a wai application.

Convert a RouteM to a wai Application

HandlerM Monad makes it easy to build a handler

type HandlerM master a = HandlerMI master IO a Source

The HandlerM Monad

runHandlerM :: HandlerM master () -> Handler master Source

Run HandlerM, resulting in a Handler

Run a HandlerM to get a Handler

request :: HandlerM master Request Source

Get the request

Access the request data

maybeRoute :: HandlerM master (Maybe (Route master)) Source

Get the current route

Access the current route

routeAttrSet :: RouteAttrs master => HandlerM master (Set Text) Source

Get the current route attributes

Access the current route attributes as a set

master :: HandlerM master master Source

Get the master

Access the master datatype

header :: HeaderName -> ByteString -> HandlerM master () Source

Add a header to the application response TODO: Differentiate between setting and adding headers

Add a header to the response

status :: Status -> HandlerM master () Source

Set the response status

Set the response status

raw :: ByteString -> HandlerM master () Source

Set the response body TODO: Add functions to append to body, and also to flush body contents

Set the raw response body

json :: ToJSON a => a -> HandlerM master () Source

Set the body of the response to the JSON encoding of the given value. Also sets "Content-Type" header to "application/json".

Set the json response body

text :: Text -> HandlerM master () Source

Set the body of the response to the given Text value. Also sets "Content-Type" header to "text/plain".

Set the text response body

html :: ByteString -> HandlerM master () Source

Set the body of the response to the given Text value. Also sets "Content-Type" header to "text/html".

Set the html response body

next :: HandlerM master () Source

Run the next application

Run the next application in the stack