wai-middleware-content-type-0.5.0.1: Route to different middlewares based on the incoming Accept header.

Copyright(c) 2015 Athan Clark
LicenseBSD-3
Maintainerathan.clark@gmail.com
Stabilityexperimental
PortabilityGHC
Safe HaskellNone
LanguageHaskell2010

Network.Wai.Middleware.ContentType.Types

Contents

Description

 

Synopsis

Types

data FileExt Source #

Supported file extensions

Constructors

Html 
Css 
JavaScript 
Json 
Text 
Markdown 
Other Text

incliding prefix period, i.e. `.foo`

Instances

Eq FileExt Source # 

Methods

(==) :: FileExt -> FileExt -> Bool #

(/=) :: FileExt -> FileExt -> Bool #

Ord FileExt Source # 
Show FileExt Source # 
Generic FileExt Source # 

Associated Types

type Rep FileExt :: * -> * #

Methods

from :: FileExt -> Rep FileExt x #

to :: Rep FileExt x -> FileExt #

Hashable FileExt Source # 

Methods

hashWithSalt :: Int -> FileExt -> Int

hash :: FileExt -> Int

Monad m => MonadState FileExtMap (FileExtListenerT m) Source # 
type Rep FileExt Source # 
type Rep FileExt = D1 (MetaData "FileExt" "Network.Wai.Middleware.ContentType.Types" "wai-middleware-content-type-0.5.0.1-LeVaYhBQxlWJwQ76yD6NRM" False) ((:+:) ((:+:) (C1 (MetaCons "Html" PrefixI False) U1) ((:+:) (C1 (MetaCons "Css" PrefixI False) U1) (C1 (MetaCons "JavaScript" PrefixI False) U1))) ((:+:) ((:+:) (C1 (MetaCons "Json" PrefixI False) U1) (C1 (MetaCons "Text" PrefixI False) U1)) ((:+:) (C1 (MetaCons "Markdown" PrefixI False) U1) (C1 (MetaCons "Other" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Text))))))

getFileExt :: [Text] -> Maybe FileExt Source #

Gets the known file extension from a Request's pathInfo.

toExt :: (Text, Text) -> Maybe FileExt Source #

matches a file extension (including it's prefix dot - .html for example) to a known one.

data ResponseVia Source #

Constructors

ResponseVia 

Fields

mapStatus :: (Status -> Status) -> ResponseVia -> ResponseVia Source #

mapHeaders :: (ResponseHeaders -> ResponseHeaders) -> ResponseVia -> ResponseVia Source #

newtype FileExtListenerT m a Source #

The monad for our DSL - when using the combinators, our result will be this type:

myListener :: FileExtListenerT (MiddlewareT m) m ()
myListener = do
  text "Text!"
  json ("Json!" :: T.Text)

Instances

MonadTrans FileExtListenerT Source # 

Methods

lift :: Monad m => m a -> FileExtListenerT m a #

MonadTransControl FileExtListenerT Source # 

Associated Types

type StT (FileExtListenerT :: (* -> *) -> * -> *) a :: *

Methods

liftWith :: Monad m => (Run FileExtListenerT -> m a) -> FileExtListenerT m a

restoreT :: Monad m => m (StT FileExtListenerT a) -> FileExtListenerT m a

MFunctor FileExtListenerT Source # 

Methods

hoist :: Monad m => (forall a. m a -> n a) -> FileExtListenerT m b -> FileExtListenerT n b

(Monad m, MonadUrl b f m) => MonadUrl b f (FileExtListenerT m) Source # 

Methods

pathUrl :: Path b f -> FileExtListenerT m String

locUrl :: Location b f -> FileExtListenerT m String

Monad m => MonadState FileExtMap (FileExtListenerT m) Source # 
MonadWriter w m => MonadWriter w (FileExtListenerT m) Source # 

Methods

writer :: (a, w) -> FileExtListenerT m a

tell :: w -> FileExtListenerT m ()

listen :: FileExtListenerT m a -> FileExtListenerT m (a, w)

pass :: FileExtListenerT m (a, w -> w) -> FileExtListenerT m a

MonadReader r' m => MonadReader r' (FileExtListenerT m) Source # 

Methods

ask :: FileExtListenerT m r'

local :: (r' -> r') -> FileExtListenerT m a -> FileExtListenerT m a

reader :: (r' -> a) -> FileExtListenerT m a

MonadError e m => MonadError e (FileExtListenerT m) Source # 
MonadBase b m => MonadBase b (FileExtListenerT m) Source # 

Methods

liftBase :: b α -> FileExtListenerT m α

MonadBaseControl b m => MonadBaseControl b (FileExtListenerT m) Source # 

Associated Types

type StM (FileExtListenerT m :: * -> *) a :: *

Methods

liftBaseWith :: (RunInBase (FileExtListenerT m) b -> b a) -> FileExtListenerT m a

restoreM :: StM (FileExtListenerT m) a -> FileExtListenerT m a

Monad m => Monad (FileExtListenerT m) Source # 
Functor m => Functor (FileExtListenerT m) Source # 

Methods

fmap :: (a -> b) -> FileExtListenerT m a -> FileExtListenerT m b #

(<$) :: a -> FileExtListenerT m b -> FileExtListenerT m a #

MonadFix m => MonadFix (FileExtListenerT m) Source # 

Methods

mfix :: (a -> FileExtListenerT m a) -> FileExtListenerT m a #

Monad m => Applicative (FileExtListenerT m) Source # 
MonadIO m => MonadIO (FileExtListenerT m) Source # 

Methods

liftIO :: IO a -> FileExtListenerT m a #

MonadPlus m => Alternative (FileExtListenerT m) Source # 
MonadPlus m => MonadPlus (FileExtListenerT m) Source # 
(MonadResource m, MonadBase IO m) => MonadResource (FileExtListenerT m) Source # 

Methods

liftResourceT :: ResourceT IO a -> FileExtListenerT m a

MonadMask m => MonadMask (FileExtListenerT m) Source # 
MonadLogger m => MonadLogger (FileExtListenerT m) Source # 

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> FileExtListenerT m ()

MonadCont m => MonadCont (FileExtListenerT m) Source # 

Methods

callCC :: ((a -> FileExtListenerT m b) -> FileExtListenerT m a) -> FileExtListenerT m a

MonadThrow m => MonadThrow (FileExtListenerT m) Source # 

Methods

throwM :: Exception e => e -> FileExtListenerT m a

MonadCatch m => MonadCatch (FileExtListenerT m) Source # 

Methods

catch :: Exception e => FileExtListenerT m a -> (e -> FileExtListenerT m a) -> FileExtListenerT m a

Monad m => Monoid (FileExtListenerT m ()) Source # 
type StT FileExtListenerT a Source # 
type StT FileExtListenerT a = StT (StateT FileExtMap) a
type StM (FileExtListenerT m) a Source # 
type StM (FileExtListenerT m) a = ComposeSt FileExtListenerT m a

Utilities

tell' :: (Monoid w, MonadState w m) => w -> m () Source #

Version of tell for StateT

possibleFileExts :: [FileExt] -> AcceptHeader -> [FileExt] Source #

Takes an Accept header and returns the other file types handleable, in order of prescedence.

invalidEncoding :: Monad m => ResponseVia -> FileExtListenerT m () Source #

Use this combinator as the last one, as a "catch-all":

myApp = do
  text "foo"
  invalidEncoding myErrorHandler -- handles all except text/plain