Copyright | (c) 2015 Athan Clark |
---|---|
License | BSD-3 |
Maintainer | athan.clark@gmail.com |
Stability | experimental |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
- data FileExt
- allFileExts :: [FileExt]
- getFileExt :: [Text] -> Maybe FileExt
- toExt :: 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 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 :: AcceptHeader -> [FileExt]
- invalidEncoding :: Monad m => ResponseVia -> FileExtListenerT m ()
Types
Supported file extensions
allFileExts :: [FileExt] Source
All file extensions, in the order of likeliness
getFileExt :: [Text] -> Maybe FileExt Source
Gets the known file extension from a Request's pathInfo
.
toExt :: 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 | |
|
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 :: 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