module Configuration.Dotenv.Scheme.Helpers
( joinEnvs
, matchValueAndType
, missingDotenvs
, missingSchemeEnvs
, sepWithCommas
, showMissingDotenvs
, showMissingSchemeEnvs
)
where
#if !MIN_VERSION_base(4,8,0)
import Data.Functor ((<$>))
import Control.Applicative ((<*>))
#endif
import Data.List
import Configuration.Dotenv.Scheme.Types
matchValueAndType
:: [(Env, (String, String))]
-> [(String, EnvType)]
matchValueAndType =
let getValueAndType (Env{..}, (_, value)) = (value, envType)
in map getValueAndType
joinEnvs
:: [Env]
-> [(String, String)]
-> [(Env, (String, String))]
joinEnvs =
let sameName (Env{..}, (name,_)) = envName == name
in joinBy sameName
joinBy :: ((a,b) -> Bool) -> [a] -> [b] -> [(a,b)]
joinBy p xs ys =
let cartesianProduct = (,) <$> xs <*> ys
in filter p cartesianProduct
missingDotenvs
:: [Env]
-> [(Env, (String, String))]
-> [Env]
missingDotenvs =
let sameName envOne envTwo = envName envOne == envName envTwo
in missingLeft sameName
missingLeft :: (a -> a -> Bool) -> [a] -> [(a,b)] -> [a]
missingLeft p xs xys =
let getAllLeft = map fst xys
in deleteFirstsBy p xs getAllLeft
missingSchemeEnvs
:: [(String, String)]
-> [(Env, (String, String))]
-> [(String, String)]
missingSchemeEnvs =
let sameName (nameOne,_) (nameTwo,_) = nameOne == nameTwo
in missingRight sameName
missingRight :: (b -> b -> Bool) -> [b] -> [(a,b)] -> [b]
missingRight p ys xys =
let getAllRight = map snd xys
in deleteFirstsBy p ys getAllRight
sepWithCommas :: [String] -> String
sepWithCommas = intercalate ", "
showMissingDotenvs :: [Env] -> String
showMissingDotenvs = sepWithCommas . map envName
showMissingSchemeEnvs :: [(String, String)] -> String
showMissingSchemeEnvs = sepWithCommas . map fst