Copyright | (c) 2015 Athan Clark |
---|---|
License | BSD-3 |
Maintainer | athan.clark@gmail.com |
Stability | experimental |
Portability | GHC |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Synopsis
- data FileExt
- getFileExt :: [Text] -> Maybe FileExt
- toExt :: (Text, Text) -> Maybe FileExt
- data ResponseVia = forall a.ResponseVia {
- responseData :: !a
- responseStatus :: !Status
- responseHeaders :: !ResponseHeaders
- responseFunction :: !(a -> Status -> ResponseHeaders -> Response)
- runResponseVia :: ResponseVia -> Response
- mapStatus :: (Status -> Status) -> ResponseVia -> ResponseVia
- mapHeaders :: (ResponseHeaders -> ResponseHeaders) -> ResponseVia -> ResponseVia
- type FileExtMap = HashMap FileExt ResponseVia
- newtype FileExtListenerT urlbase m a = FileExtListenerT {
- runFileExtListenerT :: ReaderT (Status -> Maybe Integer -> IO ()) (StateT FileExtMap m) a
- execFileExtListenerT :: Monad m => FileExtListenerT urlbase m a -> Maybe (Status -> Maybe Integer -> IO ()) -> m FileExtMap
- overFileExts :: Monad m => [FileExt] -> (ResponseVia -> ResponseVia) -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a
- mapFileExtMap :: Monad m => (FileExtMap -> FileExtMap) -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a
- getLogger :: Monad m => FileExtListenerT urlbase m (Status -> Maybe Integer -> IO ())
- tell' :: (Monoid w, MonadState w m) => w -> m ()
- type AcceptHeader = ByteString
- possibleFileExts :: [FileExt] -> AcceptHeader -> [FileExt]
- invalidEncoding :: Monad m => ResponseVia -> FileExtListenerT urlbase m ()
Types
Supported file extensions
Instances
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 #
forall a. ResponseVia | |
|
Instances
Monad m => MonadState FileExtMap (FileExtListenerT urlbase m) Source # | |
Defined in Network.Wai.Middleware.ContentType.Types 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 # | |
Defined in Network.Wai.Middleware.ContentType.Types 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 # | |
Defined in Network.Wai.Middleware.ContentType.Types liftWith :: Monad m => (Run (FileExtListenerT urlbase) ((,) FileExtMap) -> m a) -> FileExtListenerT urlbase m a # restoreT :: Monad m => m (FileExtMap, a) -> FileExtListenerT urlbase m a # |
runResponseVia :: ResponseVia -> Response Source #
mapStatus :: (Status -> Status) -> ResponseVia -> ResponseVia Source #
mapHeaders :: (ResponseHeaders -> ResponseHeaders) -> ResponseVia -> ResponseVia Source #
type FileExtMap = HashMap FileExt ResponseVia Source #
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)
FileExtListenerT | |
|
Instances
execFileExtListenerT :: Monad m => FileExtListenerT urlbase m a -> Maybe (Status -> Maybe Integer -> IO ()) -> m FileExtMap Source #
overFileExts :: Monad m => [FileExt] -> (ResponseVia -> ResponseVia) -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a Source #
mapFileExtMap :: Monad m => (FileExtMap -> FileExtMap) -> FileExtListenerT urlbase m a -> FileExtListenerT urlbase m a Source #
Utilities
type AcceptHeader = ByteString Source #
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