Collect all errors in envy
This commit is contained in:
parent
2b85c0fa93
commit
72ffa08e18
@ -79,8 +79,8 @@ main :: IO ()
|
|||||||
main = do
|
main = do
|
||||||
cfg <-
|
cfg <-
|
||||||
Envy.load @ConfigT >>= \case
|
Envy.load @ConfigT >>= \case
|
||||||
Left err -> do
|
Left errs -> do
|
||||||
Log.error $ printf "failed to read config: %s" err
|
forM_ errs $ Log.error . printf "failed to read config: %s"
|
||||||
exitFailure
|
exitFailure
|
||||||
Right c ->
|
Right c ->
|
||||||
pure c
|
pure c
|
||||||
|
|||||||
16
src/Envy.hs
16
src/Envy.hs
@ -56,13 +56,13 @@ type t ? d = Optional t d
|
|||||||
load
|
load
|
||||||
:: forall (m :: ConfigVariant -> Type)
|
:: forall (m :: ConfigVariant -> Type)
|
||||||
. (Generic (m Value), GFromEnv (Rep (m Spec)) (Rep (m Value)))
|
. (Generic (m Value), GFromEnv (Rep (m Spec)) (Rep (m Value)))
|
||||||
=> IO (Either String (m Value))
|
=> IO (Either [String] (m Value))
|
||||||
load = do
|
load = do
|
||||||
env <- getEnvironment
|
env <- getEnvironment
|
||||||
pure $ to <$> gFromEnv @(Rep (m Spec)) @(Rep (m Value)) Proxy env
|
pure $ to <$> gFromEnv @(Rep (m Spec)) @(Rep (m Value)) Proxy env
|
||||||
|
|
||||||
class GFromEnv spec value where
|
class GFromEnv spec value where
|
||||||
gFromEnv :: Proxy (spec c) -> [(String, String)] -> Either String (value c)
|
gFromEnv :: Proxy (spec c) -> [(String, String)] -> Either [String] (value c)
|
||||||
|
|
||||||
instance
|
instance
|
||||||
(GFromEnv i o)
|
(GFromEnv i o)
|
||||||
@ -77,7 +77,15 @@ instance
|
|||||||
gFromEnv Proxy env = M1 <$> gFromEnv @i @o Proxy env
|
gFromEnv Proxy env = M1 <$> gFromEnv @i @o Proxy env
|
||||||
|
|
||||||
instance (GFromEnv i1 o1, GFromEnv i2 o2) => GFromEnv (i1 :*: i2) (o1 :*: o2) where
|
instance (GFromEnv i1 o1, GFromEnv i2 o2) => GFromEnv (i1 :*: i2) (o1 :*: o2) where
|
||||||
gFromEnv Proxy env = (:*:) <$> gFromEnv @i1 @o1 Proxy env <*> gFromEnv @i2 @o2 Proxy env
|
gFromEnv Proxy env =
|
||||||
|
case (eLhs, eRhs) of
|
||||||
|
(Left errs1, Right _) -> Left errs1
|
||||||
|
(Right _, Left errs2) -> Left errs2
|
||||||
|
(Left errs1, Left errs2) -> Left $ errs1 ++ errs2
|
||||||
|
(Right lhs, Right rhs) -> Right $ lhs :*: rhs
|
||||||
|
where
|
||||||
|
eLhs = gFromEnv @i1 @o1 Proxy env
|
||||||
|
eRhs = gFromEnv @i2 @o2 Proxy env
|
||||||
|
|
||||||
instance
|
instance
|
||||||
(KnownSymbol sym, EnvVarSpec s t)
|
(KnownSymbol sym, EnvVarSpec s t)
|
||||||
@ -86,7 +94,7 @@ instance
|
|||||||
(M1 S meta2 (Rec0 t))
|
(M1 S meta2 (Rec0 t))
|
||||||
where
|
where
|
||||||
gFromEnv Proxy env =
|
gFromEnv Proxy env =
|
||||||
M1 . K1 <$> decodeEnvVar @s @t Proxy varName (lookup varName env)
|
M1 . K1 <$> first (: []) (decodeEnvVar @s @t Proxy varName (lookup varName env))
|
||||||
where
|
where
|
||||||
varName = selectorNameToEnvVarName $ symbolVal $ Proxy @sym
|
varName = selectorNameToEnvVarName $ symbolVal $ Proxy @sym
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user