espial-0.0.4: src/PathPiece.hs
{-# 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 bid -> "b:" <> (pack . show) bid
fromPathPiece = \case
"unread" -> Just FilterUnread
"untagged" -> Just FilterUntagged
"starred" -> Just FilterStarred
s -> case splitOn ":" s of
["b", ""] -> Nothing
["b", sbid] ->
case readMay sbid of
Just bid -> Just $ FilterSingle bid
_ -> Nothing
_ -> Nothing