module Web.Scotty.Trans.Lazy where import Control.Monad (join) import Control.Monad.IO.Class import Data.Bifunctor (bimap) import qualified Data.Text.Lazy as T import qualified Web.Scotty.Action as Base import Web.Scotty.Internal.Types -- | Synonym for 'redirect302'. -- If you are unsure which redirect to use, you probably want this one. -- -- > redirect "http://www.google.com" -- -- OR -- -- > redirect "/foo/bar" redirect :: (Monad m) => T.Text -> ActionT m a redirect = redirect302 -- | Redirect to given URL with status 300 (Multiple Choices). Like throwing -- an uncatchable exception. Any code after the call to -- redirect will not be run. redirect300 :: (Monad m) => T.Text -> ActionT m a redirect300 = Base.redirect300 . T.toStrict -- | Redirect to given URL with status 301 (Moved Permanently). Like throwing -- an uncatchable exception. Any code after the call to -- redirect will not be run. redirect301 :: (Monad m) => T.Text -> ActionT m a redirect301 = Base.redirect301 . T.toStrict -- | Redirect to given URL with status 302 (Found). Like throwing -- an uncatchable exception. Any code after the call to -- redirect will not be run. redirect302 :: (Monad m) => T.Text -> ActionT m a redirect302 = Base.redirect302 . T.toStrict -- | Redirect to given URL with status 303 (See Other). Like throwing -- an uncatchable exception. Any code after the call to -- redirect will not be run. redirect303 :: (Monad m) => T.Text -> ActionT m a redirect303 = Base.redirect303 . T.toStrict -- | Redirect to given URL with status 304 (Not Modified). Like throwing -- an uncatchable exception. Any code after the call to -- redirect will not be run. redirect304 :: (Monad m) => T.Text -> ActionT m a redirect304 = Base.redirect304 . T.toStrict -- | Redirect to given URL with status 307 (Temporary Redirect). Like throwing -- an uncatchable exception. Any code after the call to -- redirect will not be run. redirect307 :: (Monad m) => T.Text -> ActionT m a redirect307 = Base.redirect307 . T.toStrict -- | Redirect to given URL with status 308 (Permanent Redirect). Like throwing -- an uncatchable exception. Any code after the call to -- redirect will not be run. redirect308 :: (Monad m) => T.Text -> ActionT m a redirect308 = Base.redirect308 . T.toStrict -- | Get a request header. Header name is case-insensitive. header :: (Monad m) => T.Text -> ActionT m (Maybe T.Text) header h = fmap T.fromStrict <$> Base.header (T.toStrict h) -- | Get all the request headers. Header names are case-insensitive. headers :: (Monad m) => ActionT m [(T.Text, T.Text)] headers = map (join bimap T.fromStrict) <$> Base.headers -- | Add to the response headers. Header names are case-insensitive. addHeader :: MonadIO m => T.Text -> T.Text -> ActionT m () addHeader k v = Base.addHeader (T.toStrict k) (T.toStrict v) -- | Set one of the response headers. Will override any previously set value for that header. -- Header names are case-insensitive. setHeader :: MonadIO m => T.Text -> T.Text -> ActionT m () setHeader k v = Base.addHeader (T.toStrict k) (T.toStrict v) text :: (MonadIO m) => T.Text -> ActionT m () text = Base.textLazy html :: (MonadIO m) => T.Text -> ActionT m () html = Base.htmlLazy