Safe Haskell | None |
---|---|
Language | Haskell2010 |
- newtype RequestParser m a = RequestParser (ReaderT Request (StateT [Text] (ExceptT Text m)) a)
- run :: RequestParser m a -> Request -> [Text] -> m (Either Text (a, [Text]))
- fail :: Monad m => Text -> RequestParser m a
- liftEither :: Monad m => Either Text a -> RequestParser m a
- liftMaybe :: Monad m => Maybe a -> RequestParser m a
- unliftEither :: Monad m => RequestParser m a -> RequestParser m (Either Text a)
- consumeSegment :: Monad m => RequestParser m Text
- consumeSegmentWithParser :: Monad m => Parser a -> RequestParser m a
- consumeSegmentIfIs :: Monad m => Text -> RequestParser m ()
- ensureThatNoSegmentsIsLeft :: Monad m => RequestParser m ()
- getMethod :: Monad m => RequestParser m ByteString
- ensureThatMethodIs :: Monad m => ByteString -> RequestParser m ()
- ensureThatMethodIsGet :: Monad m => RequestParser m ()
- ensureThatMethodIsPost :: Monad m => RequestParser m ()
- ensureThatMethodIsPut :: Monad m => RequestParser m ()
- ensureThatMethodIsDelete :: Monad m => RequestParser m ()
- ensureThatMethodIsHead :: Monad m => RequestParser m ()
- ensureThatMethodIsTrace :: Monad m => RequestParser m ()
- getHeader :: Monad m => ByteString -> RequestParser m ByteString
- ensureThatAccepts :: Monad m => ByteString -> RequestParser m ()
- ensureThatAcceptsText :: Monad m => RequestParser m ()
- ensureThatAcceptsHTML :: Monad m => RequestParser m ()
- ensureThatAcceptsJSON :: Monad m => RequestParser m ()
- checkIfAccepts :: Monad m => ByteString -> RequestParser m Bool
- getAuthorization :: Monad m => RequestParser m (Text, Text)
- getParam :: Monad m => ByteString -> RequestParser m (Maybe ByteString)
- consumeBody :: MonadIO m => RequestBodyConsumer a -> RequestParser m a
- consumeBodyFolding :: MonadIO m => (a -> ByteString -> a) -> a -> RequestParser m a
- consumeBodyBuilding :: (MonadIO m, Monoid a) => (ByteString -> a) -> RequestParser m a
- consumeBodyAsBytes :: MonadIO m => RequestParser m ByteString
- consumeBodyAsLazyBytes :: MonadIO m => RequestParser m ByteString
- consumeBodyAsBytesBuilder :: MonadIO m => RequestParser m Builder
- consumeBodyAsText :: MonadIO m => RequestParser m Text
- consumeBodyAsLazyText :: MonadIO m => RequestParser m Text
- consumeBodyAsTextBuilder :: MonadIO m => RequestParser m Builder
- consumeBodyWithBytesParser :: MonadIO m => Parser a -> RequestParser m a
- consumeBodyWithTextParser :: MonadIO m => Parser a -> RequestParser m a
Documentation
newtype RequestParser m a Source #
Parser of an HTTP request. Consumes path segments, analyzes
MonadTrans RequestParser Source # | |
Monad m => MonadError Text (RequestParser m) Source # | |
Monad m => Monad (RequestParser m) Source # | |
Functor m => Functor (RequestParser m) Source # | |
Monad m => Applicative (RequestParser m) Source # | |
Monad m => Alternative (RequestParser m) Source # | |
Monad m => MonadPlus (RequestParser m) Source # | |
MonadIO m => MonadIO (RequestParser m) Source # | |
run :: RequestParser m a -> Request -> [Text] -> m (Either Text (a, [Text])) Source #
Execute the parser providing a request and a list of segments.
liftEither :: Monad m => Either Text a -> RequestParser m a Source #
Lift Either, interpreting Left as a failure.
liftMaybe :: Monad m => Maybe a -> RequestParser m a Source #
Lift Maybe, interpreting Nothing as a failure.
unliftEither :: Monad m => RequestParser m a -> RequestParser m (Either Text a) Source #
Try a parser, extracting the error as Either.
Path segments
consumeSegment :: Monad m => RequestParser m Text Source #
Consume the next segment of the path.
consumeSegmentWithParser :: Monad m => Parser a -> RequestParser m a Source #
Consume the next segment of the path with Attoparsec parser.
consumeSegmentIfIs :: Monad m => Text -> RequestParser m () Source #
Consume the next segment if it matches the provided value and fail otherwise.
ensureThatNoSegmentsIsLeft :: Monad m => RequestParser m () Source #
Fail if there's any path segments left unconsumed.
Methods
getMethod :: Monad m => RequestParser m ByteString Source #
Get the request method.
ensureThatMethodIs :: Monad m => ByteString -> RequestParser m () Source #
Ensure that the method matches the provided value in lower-case.
ensureThatMethodIsGet :: Monad m => RequestParser m () Source #
Same as
.ensureThatMethodIs
"get"
ensureThatMethodIsPost :: Monad m => RequestParser m () Source #
Same as
.ensureThatMethodIs
"post"
ensureThatMethodIsPut :: Monad m => RequestParser m () Source #
Same as
.ensureThatMethodIs
"put"
ensureThatMethodIsDelete :: Monad m => RequestParser m () Source #
Same as
.ensureThatMethodIs
"delete"
ensureThatMethodIsHead :: Monad m => RequestParser m () Source #
Same as
.ensureThatMethodIs
"head"
ensureThatMethodIsTrace :: Monad m => RequestParser m () Source #
Same as
.ensureThatMethodIs
"trace"
Headers
getHeader :: Monad m => ByteString -> RequestParser m ByteString Source #
Lookup a header by name in lower-case.
ensureThatAccepts :: Monad m => ByteString -> RequestParser m () Source #
Ensure that the request provides an Accept header, which includes the specified content type. Content type must be in lower-case.
ensureThatAcceptsText :: Monad m => RequestParser m () Source #
Same as
.ensureThatAccepts
"text/plain"
ensureThatAcceptsHTML :: Monad m => RequestParser m () Source #
Same as
.ensureThatAccepts
"text/html"
ensureThatAcceptsJSON :: Monad m => RequestParser m () Source #
Same as
.ensureThatAccepts
"application/json"
checkIfAccepts :: Monad m => ByteString -> RequestParser m Bool Source #
Check whether the request provides an Accept header, which includes the specified content type. Content type must be in lower-case.
getAuthorization :: Monad m => RequestParser m (Text, Text) Source #
Parse the username and password from the basic authorization header.
Params
getParam :: Monad m => ByteString -> RequestParser m (Maybe ByteString) Source #
Get a parameter's value by its name, failing if the parameter is not present.
Maybe
encodes whether the value was specified, i.e. ?name=value
vs ?name
.
Body
consumeBody :: MonadIO m => RequestBodyConsumer a -> RequestParser m a Source #
Consume the request body using the provided RequestBodyConsumer.
- NOTICE
- Since the body is consumed as a stream, you can only consume it once regardless of the Alternative branching.
consumeBodyFolding :: MonadIO m => (a -> ByteString -> a) -> a -> RequestParser m a Source #
Same as
.consumeBody
foldBytes
consumeBodyBuilding :: (MonadIO m, Monoid a) => (ByteString -> a) -> RequestParser m a Source #
Same as
.consumeBody
build
consumeBodyAsBytes :: MonadIO m => RequestParser m ByteString Source #
Same as
.consumeBody
bytes
consumeBodyAsLazyBytes :: MonadIO m => RequestParser m ByteString Source #
Same as
.consumeBody
lazyBytes
consumeBodyAsBytesBuilder :: MonadIO m => RequestParser m Builder Source #
Same as
.consumeBody
bytesBuilder
consumeBodyAsText :: MonadIO m => RequestParser m Text Source #
Same as
.consumeBody
text
consumeBodyAsLazyText :: MonadIO m => RequestParser m Text Source #
Same as
.consumeBody
lazyText
consumeBodyAsTextBuilder :: MonadIO m => RequestParser m Builder Source #
Same as
.consumeBody
textBuilder
consumeBodyWithBytesParser :: MonadIO m => Parser a -> RequestParser m a Source #
Same as
.consumeBody
bytesParser
consumeBodyWithTextParser :: MonadIO m => Parser a -> RequestParser m a Source #
Same as
.consumeBody
textParser