{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
module Main where
import Data.Monoid
import Data.Text (Text)
import Webcrank.Dispatch
type Res = Text
packages :: Path '[]
packages = "packages"
package :: Path '[Text]
package = packages </> param
packageVer :: Path '[Text, Int]
packageVer = package </> param
packageVerDoc :: Path '[Text, Int]
packageVerDoc = packageVer </> "doc"
packagesResource :: Text
packagesResource = "Packages: webcrank-dispatch webcrank webcrank-wai"
packageResource :: Text -> Text
packageResource "webcrank-dispatch" = "webcrank-dispatch versions: 1 2 3"
packageResource _ = "Not found"
packageVerResource :: Text -> Int -> Text
packageVerResource "webcrank-dispatch" 1 = "webcrank-dispatch v1"
packageVerResource "webcrank-dispatch" 2 = "webcrank-dispatch v2"
packageVerResource "webcrank-dispatch" 3 = "webcrank-dispatch v3"
packageVerResource _ _ = "Not found"
dispatcher :: [Text] -> Maybe Text
dispatcher = dispatch $ mconcat
[ packages ==> packagesResource
, package ==> packageResource
, packageVer ==> packageVerResource
, packageVerDoc ==> (\_ _ -> "some docs")
]
main :: IO ()
main = do
-- route rendering
print $ renderPath packages params -- ["packages"]
print $ renderPath package $ params "webcrank-dispatch" -- ["packages", "webcrank-dispatch"]
print $ renderPath packageVer $ params "webcrank-dispatch" 1 -- ["packages", "webcrank-dispatch", "1"]
print $ renderPath packageVerDoc $ params "webcrank-dispatch" 1 -- ["packages", "webcrank-dispatch", "1", "doc"]
-- dispatching
print $ dispatcher ["packages"] -- Just "..."
print $ dispatcher ["unknown"] -- Nothing
print $ dispatcher ["packages", "webcrank-dispatch"] -- Just "..."
print $ dispatcher ["packages", "nothing"] -- Just "Not found"
print $ dispatcher ["packages", "webcrank-dispatch", "2"] -- Just "..."
print $ dispatcher ["packages", "webcrank-dispatch", "5"] -- Just "Not found"
print $ dispatcher ["packages", "webcrank-dispatch", "not-an-int"] -- Nothing
print $ dispatcher ["packages", "webcrank-dispatch", "2", "doc"] -- Just "..."
print $ dispatcher ["packages", "webcrank-dispatch", "2", "unknown"] -- Nothing