Skip to content

Commit 19e8786

Browse files
committed
leios-trace-hs: use default value for fields that fail to parse.
Outputs a message on stderr when doing so.
1 parent 928cab0 commit 19e8786

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

leios-trace-hs/src/JSONCompat.hs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99
module JSONCompat where
1010

1111
import Data.Aeson.Key (fromString)
12-
import Data.Aeson.Types (FromJSON (..), KeyValue ((.=)), Object, Parser, ToJSON (..), (.!=), (.:), (.:?))
12+
import Data.Aeson.Types (FromJSON (..), KeyValue ((.=)), Object, Parser, ToJSON (..), explicitParseFieldMaybe, parserCatchError, (.!=), (.:))
1313
import Data.Char (isUpper, toLower, toUpper)
1414
import Data.Default (Default (..))
15+
import Debug.Trace
1516
import GHC.Records (HasField (..))
1617
import GHC.TypeLits (KnownSymbol (..), SSymbol, fromSSymbol)
1718

@@ -52,7 +53,15 @@ omitDefault = Getter $ \(fld :: SSymbol fld) obj ->
5253

5354
parseFieldOrDefault :: forall obj fld a. (HasField fld obj a, Default obj, KnownSymbol fld, FromJSON a) => Object -> Parser a
5455
parseFieldOrDefault obj =
55-
obj .:? fromString (camelToKebab (fromSSymbol (symbolSing @fld))) .!= getField @fld (def :: obj)
56+
explicitParseFieldMaybe tracingParser obj (fromString (camelToKebab (fromSSymbol (symbolSing @fld))))
57+
.!= defVal
58+
where
59+
defVal = getField @fld (def :: obj)
60+
tracingParser v =
61+
parseJSON v
62+
`parserCatchError` ( \path msg ->
63+
trace ("Using default value for: " ++ show path ++ " , error: " ++ msg) (pure defVal)
64+
)
5665

5766
parseField :: forall obj fld a. (HasField fld obj a, KnownSymbol fld, FromJSON a) => Object -> Parser a
5867
parseField obj = obj .: fromString (camelToKebab (fromSSymbol (symbolSing @fld)))

0 commit comments

Comments
 (0)