module Snap.Snaplet.Router.URL
( urlPath
, urlPathParams
, redirectURL
, redirectURLParams
) where
import Data.Text
import Data.Text.Encoding (encodeUtf8)
import Snap.Core (MonadSnap)
import qualified Snap.Core as SC
import Snap.Snaplet.Router.Internal.Types
import Web.Routes (PathInfo, toPathInfoParams)
urlPath :: (HasRouter m, PathInfo (URL m)) => URL m
-> m Path
urlPath u = urlPathParams u []
urlPathParams :: (HasRouter m, PathInfo (URL m)) => URL m
-> [(Text, Maybe Text)]
-> m Path
urlPathParams u p = do
state <- getRouterState
return $ urlPathParamsWithPrefix (_prefix state) u p
redirectURL
:: (HasRouter m, MonadSnap m, PathInfo (URL m)) =>
URL m
-> m ()
redirectURL u = redirectURLParams u []
redirectURLParams
:: (HasRouter m, MonadSnap m, PathInfo (URL m)) =>
URL m
-> [(Text, Maybe Text)]
-> m ()
redirectURLParams u p = SC.redirect . encodeUtf8 =<< urlPathParams u p
urlPathParamsWithPrefix
:: PathInfo url =>
Text
-> url
-> [(Text, Maybe Text)]
-> Path
urlPathParamsWithPrefix prefix u p = prefix `append` toPathInfoParams u p