module Data.Env (EnvSchema(..)) where
import Control.Monad.IO.Class
import Data.Env.ExtractFields
import Data.Env.RecordParser
class (ExtractFields a, RecordParser a) => EnvSchema a where
validateEnv :: MonadIO m => m (Either String a)
validateEnv = do
Map String String
envRaw <- forall {k} (a :: k) (m :: * -> *).
(MonadIO m, ExtractFields a) =>
m (Map String String)
forall a (m :: * -> *).
(MonadIO m, ExtractFields a) =>
m (Map String String)
getEnvRawCamelCaseToUpperSnake @a
Either String a -> m (Either String a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String a -> m (Either String a))
-> Either String a -> m (Either String a)
forall a b. (a -> b) -> a -> b
$ Map String String -> Either String a
forall a. RecordParser a => Map String String -> Either String a
parseRecord Map String String
envRaw
validateEnvWith :: MonadIO m => (String -> String) -> m (Either String a)
validateEnvWith String -> String
transform = do
Map String String
envRaw <- forall {k} (a :: k) (m :: * -> *).
(MonadIO m, ExtractFields a) =>
(String -> String) -> m (Map String String)
forall a (m :: * -> *).
(MonadIO m, ExtractFields a) =>
(String -> String) -> m (Map String String)
getEnvRaw @a String -> String
transform
Either String a -> m (Either String a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String a -> m (Either String a))
-> Either String a -> m (Either String a)
forall a b. (a -> b) -> a -> b
$ Map String String -> Either String a
forall a. RecordParser a => Map String String -> Either String a
parseRecord Map String String
envRaw