module Stan.EnvVars
( EnvVars (..)
, getEnvVars
, envVarsToText
) where
import Trial (TaggedTrial, Trial (..), fiasco, withTag)
newtype EnvVars = EnvVars
{ EnvVars -> TaggedTrial Text Bool
envVarsUseDefaultConfigFile :: TaggedTrial Text Bool
}
getEnvVars :: IO EnvVars
getEnvVars :: IO EnvVars
getEnvVars = do
TaggedTrial Text Bool
envVarsUseDefaultConfigFile <- String -> (String -> Trial Text Bool) -> IO (TaggedTrial Text Bool)
forall a.
String -> (String -> Trial Text a) -> IO (TaggedTrial Text a)
getEnvVar String
"STAN_USE_DEFAULT_CONFIG" ((String -> Trial Text Bool) -> IO (TaggedTrial Text Bool))
-> (String -> Trial Text Bool) -> IO (TaggedTrial Text Bool)
forall a b. (a -> b) -> a -> b
$ \case
String
"True" -> Bool -> Trial Text Bool
forall a. a -> Trial Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
String
"False" -> Bool -> Trial Text Bool
forall a. a -> Trial Text a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
String
_ -> Text -> Trial Text Bool
forall e a. e -> Trial e a
fiasco Text
"Incorrect value is set for STAN_USE_DEFAULT_CONFIG"
EnvVars -> IO EnvVars
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure EnvVars{TaggedTrial Text Bool
envVarsUseDefaultConfigFile :: TaggedTrial Text Bool
envVarsUseDefaultConfigFile :: TaggedTrial Text Bool
..}
where
getEnvVar :: String -> (String -> Trial Text a) -> IO (TaggedTrial Text a)
getEnvVar :: forall a.
String -> (String -> Trial Text a) -> IO (TaggedTrial Text a)
getEnvVar String
var String -> Trial Text a
act = String -> IO (Maybe String)
forall (m :: * -> *). MonadIO m => String -> m (Maybe String)
lookupEnv String
var IO (Maybe String)
-> (Maybe String -> TaggedTrial Text a) -> IO (TaggedTrial Text a)
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \Maybe String
val -> Text -> Trial Text a -> TaggedTrial Text a
forall tag a. tag -> Trial tag a -> TaggedTrial tag a
withTag Text
"EnvVar" (Trial Text a -> TaggedTrial Text a)
-> Trial Text a -> TaggedTrial Text a
forall a b. (a -> b) -> a -> b
$ case Maybe String
val of
Maybe String
Nothing -> Text -> Trial Text a
forall e a. e -> Trial e a
fiasco (Text -> Trial Text a) -> Text -> Trial Text a
forall a b. (a -> b) -> a -> b
$ Text
"No " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
forall a. ToText a => a -> Text
toText String
var Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" Env Variable is set"
Just String
s -> String -> Trial Text a
act String
s
envVarsToText :: EnvVars -> Text
envVarsToText :: EnvVars -> Text
envVarsToText EnvVars{TaggedTrial Text Bool
envVarsUseDefaultConfigFile :: EnvVars -> TaggedTrial Text Bool
envVarsUseDefaultConfigFile :: TaggedTrial Text Bool
..} = case TaggedTrial Text Bool
envVarsUseDefaultConfigFile of
Result DList Text
_ (Text
_, Bool
res) -> Text
"STAN_USE_DEFAULT_CONFIG=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Bool -> Text
forall b a. (Show a, IsString b) => a -> b
show Bool
res
Fiasco DList (Fatality, Text)
_ -> Text
""