hwm-0.2.0: src/HWM/CLI/Command/Registry/Ls.hs
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoImplicitPrelude #-}
module HWM.CLI.Command.Registry.Ls (runRegistryLs, RegistryLsOptions (..)) where
import qualified Data.Text as T
import HWM.Core.Formatting (Format (..), formatTable)
import HWM.Core.Parsing (ParseCLI (..))
import HWM.Domain.ConfigT (ConfigT)
import HWM.Domain.Registry (askRegistry, getDependencies)
import HWM.Runtime.UI (putLine, section)
import Options.Applicative (help, long, metavar, short, strOption)
import Relude
newtype RegistryLsOptions = RegistryLsOptions {regSearch :: Maybe Text} deriving (Show)
instance ParseCLI RegistryLsOptions where
parseCLI = RegistryLsOptions <$> optional (strOption (long "search" <> short 's' <> metavar "SEARCH" <> help "Filter registry entries"))
runRegistryLs :: RegistryLsOptions -> ConfigT ()
runRegistryLs RegistryLsOptions {regSearch} = do
deps <- getDependencies <$> askRegistry
let filtered = maybe deps (\s -> filter (T.isInfixOf s . format) deps) regSearch
section "registry" $ forM_ (formatTable (map format filtered)) putLine