name: web-inv-route
version: 0.1
synopsis: Composable, reversible, efficient web routing based on invertible invariants and bijections
description:
Utilities to route HTTP requests, mainly focused on path components. Routes are specified using bijections and invariant functors, allowing run-time composition (routes can be distributed across modules), reverse and forward routing derived from the same specification, and O(log n) lookups.
.
There are four steps/components of this package.
.
1. Route endpoint specification: "Web.Route.Invertible.Common"
2. Route map construction: "Web.Route.Invertible.Common"
3. Route map lookup: "Web.Route.Invertible" (for the generic interface), "Web.Route.Invertible.Wai", "Web.Route.Invertible.Snap", or "Web.Route.Invertible.Happstack"
4. Reverse routing: "Web.Route.Invertible" or "Web.Route.Invertible.URI"
.
Most users will just want to import a framework-specific module like "Web.Route.Invertible.Wai" (or the generic "Web.Route.Invertible"), each of which re-exports "Web.Route.Invertible.Common".
See test/Main.hs for some examples.
license: BSD3
author: Dylan Simon
maintainer: dylan@dylex.net
copyright: 2016
category: Web
build-type: Simple
cabal-version: >=1.20
source-repository head
type: git
location: https://github.com/dylex/web-inv-route
flag uri
description: Support constructing URIs from routes
flag wai
description: Provide WAI-compatible interfaces
flag snap
description: Provide Snap-compatible interfaces
flag happstack
description: Provide Happstack-compatible interfaces
library
exposed-modules:
Web.Route.Invertible
Web.Route.Invertible.Common
Web.Route.Invertible.Internal
other-modules:
Web.Route.Invertible.String
Web.Route.Invertible.Parameter
Web.Route.Invertible.Placeholder
Web.Route.Invertible.Sequence
Web.Route.Invertible.Path
Web.Route.Invertible.Host
Web.Route.Invertible.Method
Web.Route.Invertible.Query
Web.Route.Invertible.ContentType
Web.Route.Invertible.Dynamics
Web.Route.Invertible.Route
Web.Route.Invertible.Request
Web.Route.Invertible.Result
Web.Route.Invertible.Monoid.Exactly
Web.Route.Invertible.Monoid.Prioritized
Web.Route.Invertible.Map
Web.Route.Invertible.Map.Monoid
Web.Route.Invertible.Map.MonoidHash
Web.Route.Invertible.Map.Default
Web.Route.Invertible.Map.Const
Web.Route.Invertible.Map.Bool
Web.Route.Invertible.Map.ParameterType
Web.Route.Invertible.Map.Placeholder
Web.Route.Invertible.Map.Sequence
Web.Route.Invertible.Map.Path
Web.Route.Invertible.Map.Host
Web.Route.Invertible.Map.Method
Web.Route.Invertible.Map.Query
Web.Route.Invertible.Map.Custom
Web.Route.Invertible.Map.Route
build-depends:
base >= 4.8 && <5,
containers >= 0.5,
transformers,
hashable,
unordered-containers,
text >= 0.10,
bytestring >= 0.10,
case-insensitive,
http-types >= 0.9,
invertible > 0.1
default-language: Haskell2010
ghc-options: -Wall
if flag(uri)
exposed-modules: Web.Route.Invertible.URI
build-depends: network-uri
if flag(wai)
exposed-modules: Web.Route.Invertible.Wai
build-depends: wai >= 1
if flag(snap)
exposed-modules: Web.Route.Invertible.Snap
build-depends: snap-core >= 0.9
if flag(happstack)
exposed-modules: Web.Route.Invertible.Happstack
build-depends: happstack-server >= 7
test-suite tests
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Main.hs
default-language: Haskell2010
ghc-options: -Wall
build-depends:
base,
bytestring,
text,
network-uri,
HUnit,
web-inv-route