diff options
| author | Hannes Schulze <contact@haschu.me> | 2026-10-03 22:52:15 +0200 |
|---|---|---|
| committer | Hannes Schulze <contact@haschu.me> | 2026-10-03 22:52:15 +0200 |
| commit | 0bffdaf882a9ecdae7887ac59223ed489c96dc64 (patch) | |
| tree | 53c9393820018f55c76fbf54aa56803dbeb65ab7 /src/Settlr/Routes.hs | |
| parent | 0d43caf82404abc610a56520bfe7ef15559ce2c5 (diff) | |
routing
Diffstat (limited to 'src/Settlr/Routes.hs')
| -rw-r--r-- | src/Settlr/Routes.hs | 33 |
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 |
