Copyright | (c) 2015 Athan Clark |
---|---|
License | BSD-3 |
Maintainer | athan.clark@gmail.com |
Stability | experimental |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
- data FileExt
- getFileExt :: [Text] -> Maybe FileExt
- toExt :: (Text, Text) -> Maybe FileExt
- data ResponseVia = 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 m a = FileExtListenerT {
- runFileExtListenerT :: StateT FileExtMap m a
- execFileExtListenerT :: Monad m => FileExtListenerT m a -> m FileExtMap
- overFileExts :: Monad m => [FileExt] -> (ResponseVia -> ResponseVia) -> FileExtListenerT m a -> FileExtListenerT m a
- mapFileExtMap :: Monad m => (FileExtMap -> FileExtMap) -> FileExtListenerT m a -> FileExtListenerT m a
- tell' :: (Monoid w, MonadState w m) => w -> m ()
- type AcceptHeader = ByteString
- possibleFileExts :: [FileExt] -> AcceptHeader -> [FileExt]
- invalidEncoding :: Monad m => ResponseVia -> FileExtListenerT m ()
Types
Supported file extensions
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 #
ResponseVia | |
|
Monad m => MonadState FileExtMap (FileExtListenerT m) Source # | |
runResponseVia :: ResponseVia -> Response Source #
mapStatus :: (Status -> Status) -> ResponseVia -> ResponseVia Source #
mapHeaders :: (ResponseHeaders -> ResponseHeaders) -> ResponseVia -> ResponseVia Source #
type FileExtMap = HashMap FileExt 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)
execFileExtListenerT :: Monad m => FileExtListenerT m a -> m FileExtMap Source #
overFileExts :: Monad m => [FileExt] -> (ResponseVia -> ResponseVia) -> FileExtListenerT m a -> FileExtListenerT m a Source #
mapFileExtMap :: Monad m => (FileExtMap -> FileExtMap) -> FileExtListenerT m a -> FileExtListenerT 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 m () Source #
Use this combinator as the last one, as a "catch-all":
myApp = do text "foo" invalidEncoding myErrorHandler -- handles all except text/plain