{-# LANGUAGE RankNTypes #-}

module Niv.Cmd where

import Niv.Sources
import Niv.Update
import qualified Data.Aeson as Aeson
import qualified Data.Text as T
import qualified Options.Applicative as Opts

-- TODO: add filter
data Cmd = Cmd
  { description :: forall a. Opts.InfoMod a
  , parseCmdShortcut :: T.Text -> Maybe (PackageName, Aeson.Object)
  , parsePackageSpec :: Opts.Parser PackageSpec
  , updateCmd :: Update () ()
  , name :: T.Text
  }