The wai-routes package

[Tags:library, mit]

Provides easy to use typesafe URLs for Wai Applications.

Sample usage follows (See examples/Example.hs in the source bundle for the full code) -

{-# LANGUAGE OverloadedStrings, TypeFamilies #-}

import Network.Wai
import Network.Wai.Middleware.Routes

import Data.IORef

-- The Site Argument
data MyRoute = MyRoute (IORef DB)

-- Generate Routes
mkRoute MyRoute [parseRoutes|
/             UsersR         GET
/user/#Int    UserR:
  /              UserRootR   GET
  /delete        UserDeleteR POST
|]

-- Define Handlers
-- All Users Page
getUsersR :: Handler MyRoute
getUsersR (MyRoute dbref) request = ...
-- Single User Page
getUserRootR :: Int -> Handler MyRoute
getUserRootR userid (MyRoute dbref) request = ...
-- Delete Single User
postUserDeleteR :: Int -> Handler MyRoute
postUserDeleteR userid (MyRoute dbref) request = ...

-- Define Application using RouteM Monad
myApp = do
  db <- liftIO $ newIORef mydb
  route (MyRoute db)
  setDefaultAction $ staticApp $ defaultFileServerSettings "static"

-- Run the application
main :: IO ()
main = toWaiApp myApp >>= run 8080

[Skip to Readme]

Properties

Versions 0.1, 0.2, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.4.0, 0.4.1, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.7.0, 0.7.1, 0.7.2, 0.7.3, 0.8.0, 0.8.1, 0.9.0, 0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.9.5, 0.9.6, 0.9.7, 0.9.8
Dependencies base (>=3 && <5), blaze-builder (>=0.2.1.4 && <0.4), http-types (>=0.7), mtl, path-pieces, template-haskell, text, wai (>=1.3), yesod-routes (==1.1.*) [details]
License MIT
Author Anupam Jain
Maintainer ajnsit@gmail.com
Stability Experimental
Category Network
Home page https://github.com/ajnsit/wai-routes
Source repository head: git clone http://github.com/ajnsit/wai-routes
this: git clone http://github.com/ajnsit/wai-routes/tree/v0.2.4(tag v0.2.4)
Uploaded Sun May 19 09:56:40 UTC 2013 by AnupamJain
Distributions LTSHaskell:0.9.8, NixOS:0.9.8
Downloads 3521 total (71 in the last 30 days)
Votes
1 []
Status Docs uploaded by user
Build status unknown [no reports yet]

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for wai-routes

Readme for wai-routes-0.2.4

Wai Routes (wai-routes-0.2.3)
==============================

This package provides typesafe URLs for Wai applications.

Features:
  - Automatic generation of Route boilerplate using TH
  - Easy Nested Routes
  - Sitewide Master datatype which is passed to all handlers
    and can be used for persistent data (like DB connections)
  - RouteM monad that makes it easy to compose an application
    with multiple routes and middleware.

It depends on yesod-routes package for the TH functionality (but not the rest of yesod). The aim is to provide a similar level of typesafe URL functionality to Wai applications as is available to Yesod applications.


Example Usage
=============

The following builds a simple JSON service (using Aeson for JSON conversion)


    {-# LANGUAGE OverloadedStrings, TypeFamilies #-}

    import Network.Wai
    import Network.Wai.Middleware.Routes

    import Data.IORef

    -- The Site Argument
    data MyRoute = MyRoute (IORef DB)

    -- Generate Routes
    mkRoute MyRoute [parseRoutes|
    /             UsersR         GET
    /user/#Int    UserR:
      /              UserRootR   GET
      /delete        UserDeleteR POST
    |]

    -- Define Handlers
    -- All Users Page
    getUsersR :: Handler MyRoute
    getUsersR (MyRoute dbref) request = ...
    -- Single User Page
    getUserRootR :: Int -> Handler MyRoute
    getUserRootR userid (MyRoute dbref) request = ...
    -- Delete Single User
    postUserDeleteR :: Int -> Handler MyRoute
    postUserDeleteR userid (MyRoute dbref) request = ...

    -- Define Application using RouteM Monad
    myApp = do
      db <- liftIO $ newIORef mydb
      route (MyRoute db)
      setDefaultAction $ staticApp $ defaultFileServerSettings "static"

    -- Run the application
    main :: IO ()
    main = toWaiApp myApp >>= run 8080


Changelog
=========

0.1   : Intial release
0.2   : Updated functionality based on yesod-routes package
0.2.1 : Changed license to MIT
0.2.2 : Fixed license information in hs and cabal files
0.2.3 : Implemented a better showRoute function. Added blaze-builder as a dependency
0.2.4 : Put an upper bound on yesod-routes version as 1.2 breaks API compatibility