module Cachix.Client
  ( main,
  )
where

import Cachix.Client.Commands as Commands
import Cachix.Client.Env (cachixVersion, mkEnv)
import Cachix.Client.OptionsParser (CachixCommand (..), getOpts)
import Protolude

main :: IO ()
main :: IO ()
main = do
  (cachixoptions :: CachixOptions
cachixoptions, command :: CachixCommand
command) <- IO (CachixOptions, CachixCommand)
getOpts
  Env
env <- CachixOptions -> IO Env
mkEnv CachixOptions
cachixoptions
  case CachixCommand
command of
    AuthToken token :: Text
token -> Env -> Text -> IO ()
Commands.authtoken Env
env Text
token
    GenerateKeypair name :: Text
name -> Env -> Text -> IO ()
Commands.generateKeypair Env
env Text
name
    Push pushArgs :: PushArguments
pushArgs -> Env -> PushArguments -> IO ()
Commands.push Env
env PushArguments
pushArgs
    WatchStore watchArgs :: PushOptions
watchArgs name :: Text
name -> Env -> PushOptions -> Text -> IO ()
Commands.watchStore Env
env PushOptions
watchArgs Text
name
    WatchExec pushArgs :: PushOptions
pushArgs name :: Text
name cmd :: Text
cmd args :: [Text]
args -> Env -> PushOptions -> Text -> Text -> [Text] -> IO ()
Commands.watchExec Env
env PushOptions
pushArgs Text
name Text
cmd [Text]
args
    Use name :: Text
name useOptions :: UseOptions
useOptions -> Env -> Text -> UseOptions -> IO ()
Commands.use Env
env Text
name UseOptions
useOptions
    Version -> Text -> IO ()
forall (m :: * -> *). MonadIO m => Text -> m ()
putText Text
cachixVersion