{-# LANGUAGE CPP #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}
module System.Etc.Spec (
module Types
, parseConfigSpec
, readConfigSpec
) where
import qualified Data.Text.IO as Text (readFile)
import RIO
import qualified RIO.Text as Text
import System.Etc.Internal.Spec.Types as Types
(ConfigSpec, ConfigValue, ConfigurationError (..))
#ifdef WITH_CLI
import qualified Data.Aeson as JSON
#endif
#ifdef WITH_YAML
import qualified System.Etc.Internal.Spec.YAML as YAML
#else
import qualified System.Etc.Internal.Spec.JSON as JSONSpec
#endif
#ifdef WITH_CLI
parseConfigSpec
:: (MonadThrow m, JSON.FromJSON cmd)
=> Text
-> m (ConfigSpec cmd)
#else
parseConfigSpec
:: (MonadThrow m)
=> Text
-> m (ConfigSpec ())
#endif
#ifdef WITH_YAML
parseConfigSpec = YAML.parseConfigSpec
#else
parseConfigSpec = JSONSpec.parseConfigSpec
#endif
#ifdef WITH_CLI
readConfigSpec
:: JSON.FromJSON cmd
=> Text
-> IO (ConfigSpec cmd)
#else
readConfigSpec
:: Text
-> IO (ConfigSpec ())
#endif
readConfigSpec filepath = do
contents <- Text.readFile $ Text.unpack filepath
parseConfigSpec contents