opt-env-conf 0.6.0.0 → 0.6.0.1
raw patch · 5 files changed
+92/−1 lines, 5 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ OptEnvConf: secretTextFileOrBareSetting :: HasCallStack => [Builder FilePath] -> Parser Text
+ OptEnvConf: secretTextFileSetting :: HasCallStack => [Builder FilePath] -> Parser Text
+ OptEnvConf.Parser: secretTextFileOrBareSetting :: HasCallStack => [Builder FilePath] -> Parser Text
+ OptEnvConf.Parser: secretTextFileSetting :: HasCallStack => [Builder FilePath] -> Parser Text
+ OptEnvConf.Setting: mapMaybeBuilder :: (BuildInstruction a -> Maybe (BuildInstruction b)) -> Builder a -> Builder b
+ OptEnvConf.Setting: suffixConfigValSettingKey :: String -> ConfigValSetting a -> ConfigValSetting a
Files
- CHANGELOG.md +7/−0
- opt-env-conf.cabal +1/−1
- src/OptEnvConf.hs +2/−0
- src/OptEnvConf/Parser.hs +69/−0
- src/OptEnvConf/Setting.hs +13/−0
CHANGELOG.md view
@@ -1,5 +1,12 @@ # Changelog +## [0.6.0.1] - 2024-10-18++### Added++* `secretTextFileSetting`+* `secretTextFileOrBareSetting`+ ## [0.6.0.0] - 2024-10-18 ### Added
opt-env-conf.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: opt-env-conf-version: 0.6.0.0+version: 0.6.0.1 synopsis: Settings parsing for Haskell: command-line arguments, environment variables, and configuration values. homepage: https://github.com/NorfairKing/opt-env-conf#readme bug-reports: https://github.com/NorfairKing/opt-env-conf/issues
src/OptEnvConf.hs view
@@ -99,6 +99,8 @@ -- *** Secrets readSecretTextFile,+ secretTextFileSetting,+ secretTextFileOrBareSetting, -- *** Migration strOption,
src/OptEnvConf/Parser.hs view
@@ -52,6 +52,8 @@ yesNoSwitch, makeDoubleSwitch, readSecretTextFile,+ secretTextFileSetting,+ secretTextFileOrBareSetting, -- * Parser implementation Parser (..),@@ -911,6 +913,73 @@ -- that messes with line endings. readSecretTextFile :: Path Abs File -> IO Text readSecretTextFile = fmap T.strip . T.readFile . fromAbsFile++-- | Load a secret from a text file, with 'readSecretTextFile'+secretTextFileSetting :: (HasCallStack) => [Builder FilePath] -> Parser Text+secretTextFileSetting bs = withFrozenCallStack $ mapIO readSecretTextFile $ filePathSetting bs++-- | Load a secret from a text file, with 'readSecretTextFile', or specify it+-- directly+secretTextFileOrBareSetting :: (HasCallStack) => [Builder FilePath] -> Parser Text+secretTextFileOrBareSetting bs =+ withFrozenCallStack $+ let b = mconcat $ bs ++ [reader str]+ bareSetting f = T.pack <$> setting [mapMaybeBuilder f b, metavar "SECRET"]+ fileSetting f = secretTextFileSetting [mapMaybeBuilder f b]+ in choice+ [ bareSetting $ \case+ BuildTryArgument -> Nothing+ BuildAddShort s -> Just $ BuildAddShort s+ BuildAddLong l -> Just $ BuildAddLong l+ BuildAddEnv _ -> Nothing+ BuildAddConf _ -> Nothing+ BuildSetDefault _ _ -> Nothing+ i -> Just i,+ fileSetting $ \case+ BuildTryArgument -> Nothing+ BuildAddShort _ -> Nothing+ BuildAddLong l -> Just $ BuildAddLong (l <> NE.fromList "-file")+ BuildAddEnv _ -> Nothing+ BuildAddConf _ -> Nothing+ BuildSetDefault _ _ -> Nothing+ i -> Just i,+ bareSetting $ \case+ BuildTryArgument -> Nothing+ BuildTryOption -> Nothing+ BuildAddShort _ -> Nothing+ BuildAddLong _ -> Nothing+ BuildAddEnv v -> Just $ BuildAddEnv v+ BuildAddConf _ -> Nothing+ BuildSetDefault _ _ -> Nothing+ i -> Just i,+ fileSetting $ \case+ BuildTryArgument -> Nothing+ BuildTryOption -> Nothing+ BuildAddShort _ -> Nothing+ BuildAddLong _ -> Nothing+ BuildAddEnv e -> Just $ BuildAddEnv $ e ++ "_FILE"+ BuildAddConf _ -> Nothing+ BuildSetDefault _ _ -> Nothing+ i -> Just i,+ bareSetting $ \case+ BuildTryArgument -> Nothing+ BuildTryOption -> Nothing+ BuildAddShort _ -> Nothing+ BuildAddLong _ -> Nothing+ BuildAddEnv _ -> Nothing+ BuildAddConf k -> Just $ BuildAddConf k+ BuildSetDefault _ _ -> Nothing+ i -> Just i,+ fileSetting $ \case+ BuildTryArgument -> Nothing+ BuildTryOption -> Nothing+ BuildAddShort _ -> Nothing+ BuildAddLong _ -> Nothing+ BuildAddEnv _ -> Nothing+ BuildAddConf k -> Just $ BuildAddConf $ suffixConfigValSettingKey "-file" k+ BuildSetDefault _ _ -> Nothing+ i -> Just i+ ] -- | Prefix all 'long's and 'short's with a given 'String'. {-# ANN subArgs ("NOCOVER" :: String) #-}
src/OptEnvConf/Setting.hs view
@@ -35,10 +35,12 @@ -- * Internal showSettingABit, completeBuilder,+ mapMaybeBuilder, emptySetting, Metavar, Help, prefixConfigValSetting,+ suffixConfigValSettingKey, ) where @@ -96,6 +98,14 @@ prefixConfigValSetting :: String -> ConfigValSetting a -> ConfigValSetting a prefixConfigValSetting prefix c = c {configValSettingPath = prefix NE.<| configValSettingPath c} +suffixConfigValSettingKey :: String -> ConfigValSetting a -> ConfigValSetting a+suffixConfigValSettingKey suffix c = c {configValSettingPath = suffixPath $ configValSettingPath c}+ where+ suffixPath :: NonEmpty String -> NonEmpty String+ suffixPath (f :| rest) = case NE.nonEmpty rest of+ Nothing -> (f <> suffix) :| []+ Just ne -> f NE.<| suffixPath ne+ -- | A 'mempty' 'Setting' to build up a setting from. emptySetting :: Setting a emptySetting =@@ -204,6 +214,9 @@ -- | Complete a 'Builder' into a 'Setting' completeBuilder :: Builder a -> Setting a completeBuilder b = applyBuildInstructions (unBuilder b) emptySetting++mapMaybeBuilder :: (BuildInstruction a -> Maybe (BuildInstruction b)) -> Builder a -> Builder b+mapMaybeBuilder func = Builder . mapMaybe func . unBuilder -- | Document a setting --