packages feed

web-inv-route-0.1: web-inv-route.cabal

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