wai-middleware-content-type-0.7.0: Route to different middlewares based on the incoming Accept header.
Copyright(c) 2015 Athan Clark
LicenseBSD-3
Maintainerathan.clark@gmail.com
Stabilityexperimental
PortabilityGHC
Safe HaskellSafe-Inferred
LanguageHaskell2010

Network.Wai.Middleware.ContentType

Contents

Description

 
Synopsis

Documentation

lookupFileExt :: Maybe AcceptHeader -> Maybe FileExt -> FileExtMap -> Maybe Response Source #

Given an HTTP Accept header and a content type to base lookups off of, and a map of responses, find a response.

Re-Exports

newtype FileExtListenerT urlbase m a Source #

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

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

Instances

Instances details
MonadBaseControl b m => MonadBaseControl b (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Associated Types

type StM (FileExtListenerT urlbase m) a #

Methods

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

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

MonadError e m => MonadError e (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

throwError :: e -> FileExtListenerT urlbase m a #

catchError :: FileExtListenerT urlbase m a -> (e -> FileExtListenerT urlbase m a) -> FileExtListenerT urlbase m a #

MonadReader r m => MonadReader r (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

ask :: FileExtListenerT urlbase m r #

local :: (r -> r) -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a #

reader :: (r -> a) -> FileExtListenerT urlbase m a #

Monad m => MonadState FileExtMap (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

get :: FileExtListenerT urlbase m FileExtMap #

put :: FileExtMap -> FileExtListenerT urlbase m () #

state :: (FileExtMap -> (a, FileExtMap)) -> FileExtListenerT urlbase m a #

MonadWriter w m => MonadWriter w (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

tell :: w -> FileExtListenerT urlbase m () #

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

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

MonadBase b m => MonadBase b (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftBase :: b α -> FileExtListenerT urlbase m α #

(MonadUrl urlbase m, Monad m) => MonadUrl urlbase (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

locToUrl :: Location urlbase -> FileExtListenerT urlbase m URL #

MonadBaseControl b m stM => MonadBaseControl b (FileExtListenerT urlbase m) (Compose stM ((,) FileExtMap)) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftBaseWith :: (RunInBase (FileExtListenerT urlbase m) b (Compose stM ((,) FileExtMap)) -> b a) -> FileExtListenerT urlbase m a #

restoreM :: Compose stM ((,) FileExtMap) a -> FileExtListenerT urlbase m a #

MonadTransControl (FileExtListenerT urlbase) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Associated Types

type StT (FileExtListenerT urlbase) a #

Methods

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

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

MonadTrans (FileExtListenerT urlbase) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

MonadTransControl (FileExtListenerT urlbase) ((,) FileExtMap) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftWith :: Monad m => (Run (FileExtListenerT urlbase) ((,) FileExtMap) -> m a) -> FileExtListenerT urlbase m a #

restoreT :: Monad m => m (FileExtMap, a) -> FileExtListenerT urlbase m a #

MonadFix m => MonadFix (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

MonadIO m => MonadIO (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftIO :: IO a -> FileExtListenerT urlbase m a #

MonadPlus m => Alternative (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

empty :: FileExtListenerT urlbase m a #

(<|>) :: FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a #

some :: FileExtListenerT urlbase m a -> FileExtListenerT urlbase m [a] #

many :: FileExtListenerT urlbase m a -> FileExtListenerT urlbase m [a] #

Monad m => Applicative (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

pure :: a -> FileExtListenerT urlbase m a #

(<*>) :: FileExtListenerT urlbase m (a -> b) -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m b #

liftA2 :: (a -> b -> c) -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m b -> FileExtListenerT urlbase m c #

(*>) :: FileExtListenerT urlbase m a -> FileExtListenerT urlbase m b -> FileExtListenerT urlbase m b #

(<*) :: FileExtListenerT urlbase m a -> FileExtListenerT urlbase m b -> FileExtListenerT urlbase m a #

Functor m => Functor (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

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

Monad m => Monad (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

(>>=) :: FileExtListenerT urlbase m a -> (a -> FileExtListenerT urlbase m b) -> FileExtListenerT urlbase m b #

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

return :: a -> FileExtListenerT urlbase m a #

MonadPlus m => MonadPlus (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

mzero :: FileExtListenerT urlbase m a #

mplus :: FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a #

MonadCatch m => MonadCatch (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

MonadMask m => MonadMask (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

mask :: ((forall a. FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a) -> FileExtListenerT urlbase m b) -> FileExtListenerT urlbase m b #

uninterruptibleMask :: ((forall a. FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a) -> FileExtListenerT urlbase m b) -> FileExtListenerT urlbase m b #

generalBracket :: FileExtListenerT urlbase m a -> (a -> ExitCase b -> FileExtListenerT urlbase m c) -> (a -> FileExtListenerT urlbase m b) -> FileExtListenerT urlbase m (b, c) #

MonadThrow m => MonadThrow (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

MonadLogger m => MonadLogger (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

MonadCont m => MonadCont (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

(MonadResource m, MonadBase IO m) => MonadResource (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftResourceT :: ResourceT IO a -> FileExtListenerT urlbase m a #

Monad m => Monoid (FileExtListenerT urlbase m ()) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

mempty :: FileExtListenerT urlbase m () #

mappend :: FileExtListenerT urlbase m () -> FileExtListenerT urlbase m () -> FileExtListenerT urlbase m () #

mconcat :: [FileExtListenerT urlbase m ()] -> FileExtListenerT urlbase m () #

Monad m => Semigroup (FileExtListenerT urlbase m ()) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

(<>) :: FileExtListenerT urlbase m () -> FileExtListenerT urlbase m () -> FileExtListenerT urlbase m () #

sconcat :: NonEmpty (FileExtListenerT urlbase m ()) -> FileExtListenerT urlbase m () #

stimes :: Integral b => b -> FileExtListenerT urlbase m () -> FileExtListenerT urlbase m () #

type StT (FileExtListenerT urlbase) a Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

type StT (FileExtListenerT urlbase) a = StT (StateT FileExtMap) (StT (ReaderT (Status -> Maybe Integer -> IO ())) a)
type StM (FileExtListenerT urlbase m) a Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

type StM (FileExtListenerT urlbase m) a = ComposeSt (FileExtListenerT urlbase) m a

data ResponseVia Source #

Instances

Instances details
Monad m => MonadState FileExtMap (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

get :: FileExtListenerT urlbase m FileExtMap #

put :: FileExtMap -> FileExtListenerT urlbase m () #

state :: (FileExtMap -> (a, FileExtMap)) -> FileExtListenerT urlbase m a #

MonadBaseControl b m stM => MonadBaseControl b (FileExtListenerT urlbase m) (Compose stM ((,) FileExtMap)) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftBaseWith :: (RunInBase (FileExtListenerT urlbase m) b (Compose stM ((,) FileExtMap)) -> b a) -> FileExtListenerT urlbase m a #

restoreM :: Compose stM ((,) FileExtMap) a -> FileExtListenerT urlbase m a #

MonadTransControl (FileExtListenerT urlbase) ((,) FileExtMap) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftWith :: Monad m => (Run (FileExtListenerT urlbase) ((,) FileExtMap) -> m a) -> FileExtListenerT urlbase m a #

restoreT :: Monad m => m (FileExtMap, a) -> FileExtListenerT urlbase m a #

data FileExt Source #

Supported file extensions

Constructors

Html 
Css 
JavaScript 
Json 
Text 
Markdown 
Other !Text

excluding prefix period, i.e. foo

Instances

Instances details
Generic FileExt Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Associated Types

type Rep FileExt :: Type -> Type #

Methods

from :: FileExt -> Rep FileExt x #

to :: Rep FileExt x -> FileExt #

Show FileExt Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Eq FileExt Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

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

Ord FileExt Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Hashable FileExt Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

hashWithSalt :: Int -> FileExt -> Int #

hash :: FileExt -> Int #

Monad m => MonadState FileExtMap (FileExtListenerT urlbase m) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

get :: FileExtListenerT urlbase m FileExtMap #

put :: FileExtMap -> FileExtListenerT urlbase m () #

state :: (FileExtMap -> (a, FileExtMap)) -> FileExtListenerT urlbase m a #

MonadBaseControl b m stM => MonadBaseControl b (FileExtListenerT urlbase m) (Compose stM ((,) FileExtMap)) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftBaseWith :: (RunInBase (FileExtListenerT urlbase m) b (Compose stM ((,) FileExtMap)) -> b a) -> FileExtListenerT urlbase m a #

restoreM :: Compose stM ((,) FileExtMap) a -> FileExtListenerT urlbase m a #

MonadTransControl (FileExtListenerT urlbase) ((,) FileExtMap) Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftWith :: Monad m => (Run (FileExtListenerT urlbase) ((,) FileExtMap) -> m a) -> FileExtListenerT urlbase m a #

restoreT :: Monad m => m (FileExtMap, a) -> FileExtListenerT urlbase m a #

type Rep FileExt Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

type Rep FileExt = D1 ('MetaData "FileExt" "Network.Wai.Middleware.ContentType.Types" "wai-middleware-content-type-0.7.0-DgIWu6zLZBN74bkqGTnl92" 'False) ((C1 ('MetaCons "Html" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Css" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "JavaScript" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "Json" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Text" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Markdown" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Other" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'SourceUnpack 'SourceStrict 'DecidedStrict) (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.

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 urlbase m () Source #

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

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