diff options
Diffstat (limited to 'frontend/app/Route.hs')
-rw-r--r-- | frontend/app/Route.hs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/frontend/app/Route.hs b/frontend/app/Route.hs new file mode 100644 index 0000000..36e1462 --- /dev/null +++ b/frontend/app/Route.hs @@ -0,0 +1,30 @@ +module Route + ( Route (..), + parseURI, + ) +where + +import Data.Attoparsec.Text qualified as P +import Data.Default +import Data.Text qualified as T +import Miso + +data Route + = Home + | ListCollection String + deriving (Show, Eq) + +instance Default Route where + def = Home + +parseURI :: URI -> Route +parseURI uri = + either (const def) id $ + P.parseOnly + ( P.choice + [ ListCollection <$> (P.string "#collection/" *> P.many1 P.anyChar), + pure Home + ] + <* P.endOfInput + ) + (T.pack uri.uriFragment) |