wai-middleware-content-type-0.6.2: 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

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 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 # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

MonadTransControl FileExtListenerT Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Associated Types

type StT FileExtListenerT a :: Type #

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

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftBase :: b α -> FileExtListenerT m α #

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

Defined in Network.Wai.Middleware.ContentType.Types

Associated Types

type StM (FileExtListenerT m) a :: Type #

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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 #

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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 # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

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

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

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

Methods

liftIO :: IO a -> FileExtListenerT m a #

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

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

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

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

Defined in Network.Wai.Middleware.ContentType.Types

Methods

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

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

type StT FileExtListenerT a Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

data FileExt Source #

Supported file extensions

Constructors

Html 
Css 
JavaScript 
Json 
Text 
Markdown 
Other !Text

excluding prefix period, i.e. foo

Instances
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

Show FileExt Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

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 #

Hashable FileExt Source # 
Instance details

Defined in Network.Wai.Middleware.ContentType.Types

Methods

hashWithSalt :: Int -> FileExt -> Int #

hash :: FileExt -> Int #

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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

Defined in Network.Wai.Middleware.ContentType.Types

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.6.2-loVdvwKjwTGViJ2IbPB1G" 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 m () Source #

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

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