rename collection(item) types

This commit is contained in:
2024-10-11 17:08:14 +02:00
parent 08d3a9f867
commit 8d68caeb8d

View File

@@ -25,7 +25,7 @@ data Args = Args
args :: O.Parser Args args :: O.Parser Args
args = Args <$> cmd_ args = Args <$> cmd_
data Cmd = Collection CollectionCmd data Cmd = CollectionCmd CollectionCmd
cmd_ :: O.Parser Cmd cmd_ :: O.Parser Cmd
cmd_ = cmd_ =
@@ -35,36 +35,36 @@ cmd_ =
] ]
data CollectionCmd data CollectionCmd
= CollectionAdd CollectionName = CollectionAdd Collection
| CollectionView CollectionPath | CollectionView CollectionItem
| CollectionEdit CollectionPath | CollectionEdit CollectionItem
| CollectionDelete CollectionPath | CollectionDelete CollectionItem
newtype CollectionName = CollectionName T.Text newtype Collection = Collection T.Text
deriving (Read) deriving (Read)
data CollectionPath = CollectionPath data CollectionItem = CollectionItem
{ collectionName :: CollectionName, { collectionName :: Collection,
fileName :: T.Text fileName :: T.Text
} }
instance Read CollectionPath where instance Read CollectionItem where
readPrec = R.lift do readPrec = R.lift do
(CollectionName . T.pack -> collectionName) <- R.munch (/= '/') (Collection . T.pack -> collectionName) <- R.munch (/= '/')
_ <- R.string "/" _ <- R.string "/"
(T.pack -> fileName) <- do (T.pack -> fileName) <- do
fileName <- R.munch (liftA2 (&&) (/= '.') (/= '/')) fileName <- R.munch (liftA2 (&&) (/= '.') (/= '/'))
fileExt <- R.string ".json" fileExt <- R.string ".json"
pure (fileName <> fileExt) pure (fileName <> fileExt)
pure CollectionPath {..} pure CollectionItem {..}
instance Show CollectionPath where instance Show CollectionItem where
show (CollectionPath {collectionName = CollectionName cn, fileName}) = show (CollectionItem {collectionName = Collection cn, fileName}) =
show (cn <> "/" <> fileName) show (cn <> "/" <> fileName)
collectionCmd :: O.Parser Cmd collectionCmd :: O.Parser Cmd
collectionCmd = do collectionCmd = do
fmap Collection . O.hsubparser . mconcat $ fmap CollectionCmd . O.hsubparser . mconcat $
[ O.command "add" . O.info (CollectionAdd <$> collectionNameArg) $ [ O.command "add" . O.info (CollectionAdd <$> collectionNameArg) $
O.progDesc "Add an entity" O.progDesc "Add an entity"
, O.command "view" . O.info (CollectionView <$> collectionPathArg) $ , O.command "view" . O.info (CollectionView <$> collectionPathArg) $
@@ -75,32 +75,32 @@ collectionCmd = do
O.progDesc "Delete an entity" O.progDesc "Delete an entity"
] ]
collectionPathArg :: O.Parser CollectionPath collectionPathArg :: O.Parser CollectionItem
collectionPathArg = collectionPathArg =
O.argument O.auto (O.metavar "COLLECTION_PATH") O.argument O.auto (O.metavar "COLLECTION_PATH")
collectionNameArg :: O.Parser CollectionName collectionNameArg :: O.Parser Collection
collectionNameArg = collectionNameArg =
CollectionName . T.pack <$> O.strArgument (O.metavar "COLLECTION_NAME") Collection . T.pack <$> O.strArgument (O.metavar "COLLECTION_NAME")
main :: IO () main :: IO ()
main = main =
O.execParser (O.info (args <**> O.helper) O.idm) >>= \case O.execParser (O.info (args <**> O.helper) O.idm) >>= \case
Args Args
{ cmd = Collection cmd { cmd = CollectionCmd cmd
} -> case cmd of } -> case cmd of
CollectionAdd (CollectionName cn) -> do CollectionAdd (Collection cn) -> do
print print
=<< ACMS.API.REST.Collection.create cn =<< ACMS.API.REST.Collection.create cn
=<< J.throwDecode =<< J.throwDecode
=<< LB.getContents =<< LB.getContents
CollectionView CollectionPath {collectionName = CollectionName cn, fileName} -> CollectionView CollectionItem {collectionName = Collection cn, fileName} ->
print print
=<< ACMS.API.REST.Collection.read cn fileName =<< ACMS.API.REST.Collection.read cn fileName
CollectionDelete CollectionPath {collectionName = CollectionName cn, fileName}-> CollectionDelete CollectionItem {collectionName = Collection cn, fileName}->
print print
=<< ACMS.API.REST.Collection.delete cn fileName =<< ACMS.API.REST.Collection.delete cn fileName
CollectionEdit CollectionPath {collectionName = CollectionName cn, fileName}-> CollectionEdit CollectionItem {collectionName = Collection cn, fileName}->
print print
=<< ACMS.API.REST.Collection.update cn fileName =<< ACMS.API.REST.Collection.update cn fileName
=<< J.throwDecode =<< J.throwDecode