espial/src/PathPiece.hs
Jon Schoning 2e3e7097e6 init
2019-01-30 20:54:47 -06:00

56 lines
1.4 KiB
Haskell

{-# OPTIONS_GHC -fno-warn-orphans #-}
module PathPiece where
import Data.Text (splitOn)
import Import.NoFoundation
-- PathPiece
instance PathPiece UserNameP where
toPathPiece (UserNameP i) = "u:" <> i
fromPathPiece s =
case splitOn ":" s of
["u", ""] -> Nothing
["u", uname] -> Just $ UserNameP uname
_ -> Nothing
instance PathPiece TagsP where
toPathPiece (TagsP tags) = "t:" <> (intercalate "+" tags)
fromPathPiece s =
case splitOn ":" s of
["t", ""] -> Nothing
["t", tags] -> Just $ TagsP (splitOn "+" tags)
_ -> Nothing
instance PathPiece SharedP where
toPathPiece = \case
SharedAll -> ""
SharedPublic -> "public"
SharedPrivate -> "private"
fromPathPiece = \case
"public" -> Just SharedPublic
"private" -> Just SharedPrivate
_ -> Nothing
instance PathPiece FilterP where
toPathPiece = \case
FilterAll -> ""
FilterUnread -> "unread"
FilterUntagged -> "untagged"
FilterStarred -> "starred"
FilterSingle slug -> "b:" <> unBmSlug slug
fromPathPiece = \case
"unread" -> Just FilterUnread
"untagged" -> Just FilterUntagged
"starred" -> Just FilterStarred
s -> case splitOn ":" s of
["b", ""] -> Nothing
["b", slug] -> Just $ FilterSingle (BmSlug slug)
_ -> Nothing
deriving instance PathPiece NtSlug
deriving instance PathPiece BmSlug