summaryrefslogtreecommitdiff
path: root/src/Settlr/Routes.hs
diff options
context:
space:
mode:
authorHannes Schulze <contact@haschu.me>2026-10-03 22:52:15 +0200
committerHannes Schulze <contact@haschu.me>2026-10-03 22:52:15 +0200
commit0bffdaf882a9ecdae7887ac59223ed489c96dc64 (patch)
tree53c9393820018f55c76fbf54aa56803dbeb65ab7 /src/Settlr/Routes.hs
parent0d43caf82404abc610a56520bfe7ef15559ce2c5 (diff)
routing
Diffstat (limited to 'src/Settlr/Routes.hs')
-rw-r--r--src/Settlr/Routes.hs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/Settlr/Routes.hs b/src/Settlr/Routes.hs
new file mode 100644
index 0000000..d5b0158
--- /dev/null
+++ b/src/Settlr/Routes.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Settlr.Routes
+ ( Route(..)
+ , formatRoute
+ , loadRoute
+ ) where
+
+import Data.Text (Text)
+import qualified Data.Text as T
+import Control.Monad.Reader (MonadReader, asks)
+import Settlr.Config (Config(..))
+import Data.Maybe (fromMaybe)
+import Network.CGI (MonadCGI, pathInfo)
+
+data Route
+ = RouteHome
+ | RouteNew
+
+formatRoute :: MonadReader Config m => Route -> m Text
+formatRoute route = do base <- asks cfgScriptPath
+ pure (fromMaybe base (T.stripSuffix "/" base) <> relative route)
+ where relative :: Route -> Text
+ relative RouteHome = "/"
+ relative RouteNew = "/new"
+
+loadRoute :: MonadCGI m => m (Maybe Route)
+loadRoute = decode . filter (/= T.empty) . T.splitOn "/" . T.pack <$> pathInfo
+ where decode :: [Text] -> Maybe Route
+ decode [] = Just RouteHome
+ decode ["new"] = Just RouteNew
+ decode _ = Nothing