Skip to content

Commit bcc17ae

Browse files
committed
Fix remaining errors after merging #3.
1 parent 24438d4 commit bcc17ae

File tree

2 files changed

+33
-25
lines changed

2 files changed

+33
-25
lines changed

src/TypedEnv.purs

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ import Data.Maybe (Maybe(..))
2323
import Data.Number (fromString) as Number
2424
import Data.Show.Generic (genericShow)
2525
import Data.String.CodeUnits (uncons) as String
26-
import Data.String.Common (toLower, joinWith)
27-
import Data.Symbol (class IsSymbol, reflectSymbol)
28-
import Data.String.Common (toLower)
26+
import Data.String.Common (joinWith, toLower)
2927
import Data.Symbol (class IsSymbol, reflectSymbol)
3028
import Foreign.Object (Object, lookup)
3129
import Prim.Row (class Cons, class Lacks) as Row
@@ -45,17 +43,21 @@ fromEnv
4543
fromEnv = readEnv
4644

4745
-- | An error that can occur while reading an environment variable
48-
data EnvError = EnvLookupError String | EnvParseError String | EnvErrors (Array EnvError)
46+
data EnvError
47+
= EnvLookupError String
48+
| EnvParseError String
49+
| EnvErrors (Array EnvError)
4950

5051
derive instance eqEnvError :: Eq EnvError
5152

5253
derive instance genericEnvError :: Generic EnvError _
5354

5455
instance semigroupEnvError :: Semigroup EnvError where
55-
append (EnvErrors aErrors) (EnvErrors bErrors) = EnvErrors $ aErrors <> bErrors
56-
append (EnvErrors errors) err = EnvErrors $ errors <> [err]
57-
append err (EnvErrors errors) = EnvErrors $ [err] <> errors
58-
append errA errB = EnvErrors [errA, errB]
56+
append (EnvErrors aErrors) (EnvErrors bErrors) = EnvErrors $ aErrors <>
57+
bErrors
58+
append (EnvErrors errors) err = EnvErrors $ errors <> [ err ]
59+
append err (EnvErrors errors) = EnvErrors $ [ err ] <> errors
60+
append errA errB = EnvErrors [ errA, errB ]
5961

6062
instance showEnvError :: Show EnvError where
6163
show (EnvErrors errors) = joinWith "\n" $ map genericShow errors
@@ -64,8 +66,10 @@ instance showEnvError :: Show EnvError where
6466
-- | Gets the error message for a given `EnvError` value.
6567
envErrorMessage :: EnvError -> String
6668
envErrorMessage = case _ of
67-
EnvLookupError var -> "The required variable \"" <> var <> "\" was not specified."
68-
EnvParseError var -> "The variable \"" <> var <> "\" was formatted incorrectly."
69+
EnvLookupError var -> "The required variable \"" <> var <>
70+
"\" was not specified."
71+
EnvParseError var -> "The variable \"" <> var <>
72+
"\" was formatted incorrectly."
6973
EnvErrors errors -> joinWith "\n" $ map envErrorMessage errors
7074

7175
-- | Parses a `String` value to the specified type.
@@ -143,16 +147,18 @@ instance readEnvFieldsCons ::
143147
, Row.Lacks name rt
144148
, Row.Cons name ty rt r
145149
, ReadValue ty
146-
) => ReadEnvFields (Cons name (Variable varName ty) elt) (Cons name ty rlt) r where
147-
readEnvFields _ _ env = insert value tail
148-
where
149-
nameP = Proxy :: _ name
150-
varName = reflectSymbol (Proxy :: _ varName)
151-
value = readValue varName env
152-
tail = readEnvFields (Proxy :: _ elt) (Proxy :: _ rlt) env
153-
154-
insert (Left valueErr) (Left tailErrs) = Left $ valueErr <> tailErrs
155-
insert valE tailE = Record.insert nameP <$> valE <*> tailE
156-
157-
instance readEnvFieldsNil :: TypeEquals {} (Record row) => ReadEnvFields Nil Nil row where
150+
) =>
151+
ReadEnvFields (Cons name ty elt) (Cons name ty rlt) r where
152+
readEnvFields _ _ env = insert value tail
153+
where
154+
nameP = Proxy :: _ name
155+
value = readValue (reflectSymbol nameP) env
156+
tail = readEnvFields (Proxy :: _ elt) (Proxy :: _ rlt) env
157+
158+
insert (Left valueErr) (Left tailErrs) = Left $ valueErr <> tailErrs
159+
insert valE tailE = Record.insert nameP <$> valE <*> tailE
160+
161+
instance readEnvFieldsNil ::
162+
TypeEquals {} (Record row) =>
163+
ReadEnvFields Nil Nil row where
158164
readEnvFields _ _ _ = pure $ to {}

test/Main.purs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,11 @@ main = launchAff_ $ runSpec [ consoleReporter ] $
4444

4545
it "indicates when parsing multiple values has failed" do
4646
let
47-
env = FO.fromHomogeneous { "A": "err"}
48-
expected = Left (EnvErrors [EnvParseError "A", EnvLookupError "B"])
49-
actual = fromEnv (RProxy :: RProxy (a :: Int <: "A", b :: String <: "B")) env
47+
env = FO.fromHomogeneous { "A": "err" }
48+
expected = Left (EnvErrors [ EnvParseError "A", EnvLookupError "B" ])
49+
actual = fromEnv
50+
(Proxy :: _ ("A" :: Int, "B" :: String))
51+
env
5052
actual `shouldEqual` expected
5153

5254
it "parses boolean values" do

0 commit comments

Comments
 (0)