module Conferer.Provider.PropertiesFile where
import Data.Text (Text)
import Data.Function ((&))
import System.Directory (doesFileExist)
import Data.Maybe (catMaybes)
import qualified Data.Text as Text
import qualified Data.Text.IO as Text
import Conferer.Types
import Conferer.Provider.Files
import Conferer.Provider.Null
import Conferer.Provider.Simple
mkPropertiesFileProvider :: ProviderCreator
mkPropertiesFileProvider = \config -> do
filePath <- getFilePathFromEnv config "properties"
fileExists <- doesFileExist filePath
if fileExists
then do
fileContent <- Text.readFile filePath
mkPropertiesFileProvider' fileContent config
else do
mkNullProvider config
mkPropertiesFileProvider' :: Text -> ProviderCreator
mkPropertiesFileProvider' fileContent =
\config -> do
let keyValues =
fileContent
& Text.lines
& fmap lineToKeyValue
& catMaybes
mkMapProvider keyValues config
lineToKeyValue :: Text -> Maybe (Key, Text)
lineToKeyValue line =
Text.breakOn "=" line
& (\(rawKey, rawValue) ->
case Text.stripPrefix "=" rawValue of
Just value ->
Just (Path $ Text.splitOn "." rawKey, value)
Nothing ->
Nothing
)