{-# LANGUAGE NoImplicitPrelude #-} module System.Etc.Internal.Spec.JSON where import qualified Data.Text.IO as Text (readFile) import RIO import qualified RIO.ByteString.Lazy as LBS import qualified RIO.Text as Text import qualified Data.Aeson as JSON import System.Etc.Internal.Spec.Types parseConfigSpec :: (MonadThrow m, JSON.FromJSON cmd) => Text -> m (ConfigSpec cmd) parseConfigSpec input = case JSON.eitherDecode (LBS.fromStrict $ encodeUtf8 input) of Left err -> throwM $ InvalidConfiguration Nothing (Text.pack err) Right result -> return result readConfigSpec :: JSON.FromJSON cmd => Text -> IO (ConfigSpec cmd) readConfigSpec filepath = do contents <- Text.readFile (Text.unpack filepath) parseConfigSpec contents