aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cli/app/Main.hs59
1 files changed, 38 insertions, 21 deletions
diff --git a/cli/app/Main.hs b/cli/app/Main.hs
index 7028be9..b832f14 100644
--- a/cli/app/Main.hs
+++ b/cli/app/Main.hs
@@ -4,6 +4,7 @@
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE NoFieldSelectors #-}
+{-# LANGUAGE ApplicativeDo #-}
module Main where
@@ -24,7 +25,10 @@ data Args = Args
args :: O.Parser Args
args = Args <$> cmd_
-data Cmd = Collection CollectionCmd
+data Cmd = Collection
+ { operation :: CollectionCmd
+ , filePath :: CollectionPath
+ }
cmd_ :: O.Parser Cmd
cmd_ =
@@ -33,9 +37,7 @@ cmd_ =
O.progDesc "Manage content collections"
]
-data CollectionCmd = CollectionAdd
- { filePath :: CollectionPath
- }
+data CollectionCmd = CollectionAdd | CollectionView | CollectionEdit | CollectionDelete
data CollectionPath = CollectionPath
{ collectionName :: T.Text,
@@ -57,32 +59,47 @@ instance Show CollectionPath where
show (collectionName <> "/" <> fileName)
collectionCmd :: O.Parser Cmd
-collectionCmd =
- fmap Collection . O.hsubparser . mconcat $
- [ O.command "add" . O.info collectionAddCmd $
+collectionCmd = do
+ operation <- O.hsubparser $ mconcat $
+ [ O.command "add" . O.info (pure CollectionAdd) $
O.progDesc "Add an entity"
+ , O.command "view" . O.info (pure CollectionView) $
+ O.progDesc "View an entity"
+ , O.command "edit" . O.info (pure CollectionEdit) $
+ O.progDesc "Edit an entity"
+ , O.command "delete" . O.info (pure CollectionDelete) $
+ O.progDesc "Delete an entity"
]
-
-collectionAddCmd :: O.Parser CollectionCmd
-collectionAddCmd =
- CollectionAdd
- <$> collectionPathArg
+ filePath <- collectionPathArg
+ pure $ Collection {..}
collectionPathArg :: O.Parser CollectionPath
collectionPathArg =
O.argument O.auto (O.metavar "COLLECTION_PATH")
main :: IO ()
-main = do
+main =
O.execParser (O.info (args <**> O.helper) O.idm) >>= \case
Args
{ cmd =
Collection
- CollectionAdd
- { filePath = CollectionPath {collectionName, fileName}
- }
- } ->
- print
- =<< ACMS.API.REST.Collection.create collectionName fileName
- =<< J.throwDecode
- =<< LB.getContents
+ { operation = operation
+ , filePath = CollectionPath {collectionName, fileName}
+ }
+ } -> case operation of
+ CollectionAdd ->
+ print
+ =<< ACMS.API.REST.Collection.create collectionName fileName
+ =<< J.throwDecode
+ =<< LB.getContents
+ CollectionView ->
+ print
+ =<< ACMS.API.REST.Collection.read collectionName fileName
+ CollectionDelete ->
+ print
+ =<< ACMS.API.REST.Collection.delete collectionName fileName
+ CollectionEdit ->
+ print
+ =<< ACMS.API.REST.Collection.update collectionName fileName
+ =<< J.throwDecode
+ =<< LB.getContents