{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
import Control.Monad.Except
import Data.Proxy
import Data.Traversable
import Servant.API
import Servant.Router
type TestApi = "root" :> Capture "cap" Int :> QueryParam "param" String :> View
:<|> "other" :> Capture "othercap" String :> View
testApi :: Proxy TestApi
testApi = Proxy
testUris :: [String]
testUris =
[ "https://test.com/root/4?param=hi"
, "https://test.com/other/hi/"
, "https://test.com/fail"
, "https://test.com/root/fail"
]
main :: IO ()
main = do
let root :: Int -> Maybe String -> ExceptT RoutingError IO ()
root i s = liftIO $ print (i, s)
other :: String -> ExceptT RoutingError IO ()
other s = liftIO $ print s
void $ for testUris $ \uri -> do
result <- runExceptT $ runRoute uri testApi (root :<|> other)
print result