module System.Etc.Spec (
module Types
, parseConfigSpec
, readConfigSpec
) where
import Protolude hiding (catch)
import System.Etc.Internal.Spec.Types as Types
(ConfigSpec, ConfigValue, ConfigurationError (..))
import Control.Monad.Catch (MonadCatch (..))
#ifdef WITH_CLI
import qualified Data.Aeson as JSON
#endif
import qualified Data.Text as Text
import qualified Data.Text.IO as Text (readFile)
import qualified System.Etc.Internal.Spec.JSON as JSON
#ifdef WITH_YAML
import qualified System.Etc.Internal.Spec.YAML as YAML
#endif
#ifdef WITH_CLI
parseConfigSpec
:: (MonadCatch m, JSON.FromJSON cmd)
=> Text
-> m (ConfigSpec cmd)
#else
parseConfigSpec
:: (MonadCatch m)
=> Text
-> m (ConfigSpec ())
#endif
#ifdef WITH_YAML
parseConfigSpec input =
catch (JSON.parseConfigSpec input)
(\(_ :: SomeException) -> YAML.parseConfigSpec input)
#else
parseConfigSpec =
JSON.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