packages feed

argo-0.2021.11.11: source/library/Argo/Type/Settings.hs

module Argo.Type.Settings where

import qualified Argo.Type.Flag as Flag
import qualified Argo.Type.Indent as Indent
import qualified Text.Read as Read

data Settings = Settings
    { help :: Bool
    , indent :: Indent.Indent
    , version :: Bool
    }
    deriving (Eq, Show)

initial :: Settings
initial = Settings { help = False, indent = Indent.Spaces 0, version = False }

applyFlag :: Settings -> Flag.Flag -> Either String Settings
applyFlag settings flag = case flag of
    Flag.Help -> pure settings { help = True }
    Flag.Spaces string -> do
        int <- Read.readEither string
        pure settings { indent = Indent.Spaces int }
    Flag.Tab -> pure settings { indent = Indent.Tab }
    Flag.Version -> pure settings { version = True }