wai-routes-0.8.0: 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.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, and Routable instance

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

Generates everything except Routable instance and dispatch function

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

Generates a Routable instance and dispatch function

Dispatch

routeDispatch :: Routable master 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

showRouteQuery :: RenderRoute master => Route master -> [(Text, Text)] -> Text Source

Render a Route and Query parameters to 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 = HandlerS master master Source

A Handler generates an App from the master datatype

type HandlerS sub master = Env sub master -> App sub Source

As of Wai 3, Application datatype now follows continuation passing style

Generated Datatypes

class Routable sub 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 :: HandlerS sub 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 Request Data

data Env sub master Source

Constructors

Env 

Fields

envMaster :: master
 
envSub :: sub
 
envToMaster :: Route sub -> Route master
 

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

currentRoute :: RequestData master -> Maybe (Route master) Source

Extract the current Route from RequestData

runNext :: App master Source

Run the next application in the stack

Run the next application in the stack