diff options
Diffstat (limited to 'cli/app')
-rw-r--r-- | cli/app/Main.hs | 59 |
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 |