@@ -25,19 +25,19 @@ class GenericEncode a where
2525 encodeOpts :: Options -> a -> Foreign
2626
2727class GenericDecodeArgs a where
28- decodeArgs :: Int -> List Foreign -> F { result :: a
29- , rest :: List Foreign
30- , next :: Int
31- }
28+ decodeArgs :: Options -> Int -> List Foreign -> F { result :: a
29+ , rest :: List Foreign
30+ , next :: Int
31+ }
3232
3333class GenericEncodeArgs a where
34- encodeArgs :: a -> List Foreign
34+ encodeArgs :: Options -> a -> List Foreign
3535
3636class GenericDecodeFields a where
37- decodeFields :: Foreign -> F a
37+ decodeFields :: Options -> Foreign -> F a
3838
3939class GenericEncodeFields a where
40- encodeFields :: a -> S.StrMap Foreign
40+ encodeFields :: Options -> a -> S.StrMap Foreign
4141
4242class GenericCountArgs a where
4343 countArgs :: Proxy a -> Either a Int
@@ -74,13 +74,13 @@ instance genericDecodeConstructor
7474 case numArgs of
7575 Left a -> pure a
7676 Right 1 | opts.unwrapSingleArguments -> do
77- { result, rest } <- decodeArgs 0 (singleton args)
77+ { result, rest } <- decodeArgs opts 0 (singleton args)
7878 unless (null rest) $
7979 fail (ForeignError " Expected a single argument" )
8080 pure result
8181 Right n -> do
8282 vals <- readArray args
83- { result, rest } <- decodeArgs 0 (fromFoldable vals)
83+ { result, rest } <- decodeArgs opts 0 (fromFoldable vals)
8484 unless (null rest) $
8585 fail (ForeignError (" Expected " <> show n <> " constructor arguments" ))
8686 pure result
@@ -99,7 +99,7 @@ instance genericEncodeConstructor
9999 ctorName = reflectSymbol (SProxy :: SProxy name )
100100
101101 encodeArgsArray :: rep -> Maybe Foreign
102- encodeArgsArray = unwrapArguments <<< toUnfoldable <<< encodeArgs
102+ encodeArgsArray = unwrapArguments <<< toUnfoldable <<< encodeArgs opts
103103
104104 unwrapArguments :: Array Foreign -> Maybe Foreign
105105 unwrapArguments [] = Nothing
@@ -122,75 +122,75 @@ instance genericEncodeSum
122122 encodeOpts opts (Inr b) = encodeOpts (opts { unwrapSingleConstructors = false }) b
123123
124124instance genericDecodeArgsNoArguments :: GenericDecodeArgs NoArguments where
125- decodeArgs i Nil = pure { result: NoArguments , rest: Nil , next: i }
126- decodeArgs _ _ = fail (ForeignError " Too many constructor arguments" )
125+ decodeArgs _ i Nil = pure { result: NoArguments , rest: Nil , next: i }
126+ decodeArgs _ _ _ = fail (ForeignError " Too many constructor arguments" )
127127
128128instance genericEncodeArgsNoArguments :: GenericEncodeArgs NoArguments where
129129 encodeArgs _ = mempty
130130
131131instance genericDecodeArgsArgument
132132 :: Decode a
133133 => GenericDecodeArgs (Argument a ) where
134- decodeArgs i (x : xs) = do
134+ decodeArgs _ i (x : xs) = do
135135 a <- mapExcept (lmap (map (ErrorAtIndex i))) (decode x)
136136 pure { result: Argument a, rest: xs, next: i + 1 }
137- decodeArgs _ _ = fail (ForeignError " Not enough constructor arguments" )
137+ decodeArgs _ _ _ = fail (ForeignError " Not enough constructor arguments" )
138138
139139instance genericEncodeArgsArgument
140140 :: Encode a
141141 => GenericEncodeArgs (Argument a ) where
142- encodeArgs (Argument a) = singleton (encode a)
142+ encodeArgs _ (Argument a) = singleton (encode a)
143143
144144instance genericDecodeArgsProduct
145145 :: (GenericDecodeArgs a , GenericDecodeArgs b )
146146 => GenericDecodeArgs (Product a b ) where
147- decodeArgs i xs = do
148- { result: resA, rest: xs1, next: i1 } <- decodeArgs i xs
149- { result: resB, rest, next } <- decodeArgs i1 xs1
147+ decodeArgs opts i xs = do
148+ { result: resA, rest: xs1, next: i1 } <- decodeArgs opts i xs
149+ { result: resB, rest, next } <- decodeArgs opts i1 xs1
150150 pure { result: Product resA resB, rest, next }
151151
152152instance genericEncodeArgsProduct
153153 :: (GenericEncodeArgs a , GenericEncodeArgs b )
154154 => GenericEncodeArgs (Product a b ) where
155- encodeArgs (Product a b) = encodeArgs a <> encodeArgs b
155+ encodeArgs opts (Product a b) = encodeArgs opts a <> encodeArgs opts b
156156
157157instance genericDecodeArgsRec
158158 :: GenericDecodeFields fields
159159 => GenericDecodeArgs (Rec fields ) where
160- decodeArgs i (x : xs) = do
161- fields <- mapExcept (lmap (map (ErrorAtIndex i))) (decodeFields x)
160+ decodeArgs opts i (x : xs) = do
161+ fields <- mapExcept (lmap (map (ErrorAtIndex i))) (decodeFields opts x)
162162 pure { result: Rec fields, rest: xs, next: i + 1 }
163- decodeArgs _ _ = fail (ForeignError " Not enough constructor arguments" )
163+ decodeArgs _ _ _ = fail (ForeignError " Not enough constructor arguments" )
164164
165165instance genericEncodeArgsRec
166166 :: GenericEncodeFields fields
167167 => GenericEncodeArgs (Rec fields ) where
168- encodeArgs (Rec fs) = singleton (toForeign (encodeFields fs))
168+ encodeArgs opts (Rec fs) = singleton (toForeign (encodeFields opts fs))
169169
170170instance genericDecodeFieldsField
171171 :: (IsSymbol name , Decode a )
172172 => GenericDecodeFields (Field name a ) where
173- decodeFields x = do
174- let name = reflectSymbol (SProxy :: SProxy name )
173+ decodeFields opts x = do
174+ let name = opts.fieldTransform $ reflectSymbol (SProxy :: SProxy name )
175175 -- If `name` field doesn't exist, then `y` will be `undefined`.
176176 Field <$> (index x name >>= mapExcept (lmap (map (ErrorAtProperty name))) <<< decode)
177177
178178instance genericEncodeFieldsField
179179 :: (IsSymbol name , Encode a )
180180 => GenericEncodeFields (Field name a ) where
181- encodeFields (Field a) =
182- let name = reflectSymbol (SProxy :: SProxy name )
181+ encodeFields opts (Field a) =
182+ let name = opts.fieldTransform $ reflectSymbol (SProxy :: SProxy name )
183183 in S .singleton name (encode a)
184184
185185instance genericDecodeFieldsProduct
186186 :: (GenericDecodeFields a , GenericDecodeFields b )
187187 => GenericDecodeFields (Product a b ) where
188- decodeFields x = Product <$> decodeFields x <*> decodeFields x
188+ decodeFields opts x = Product <$> decodeFields opts x <*> decodeFields opts x
189189
190190instance genericEncodeFieldsProduct
191191 :: (GenericEncodeFields a , GenericEncodeFields b )
192192 => GenericEncodeFields (Product a b ) where
193- encodeFields (Product a b) = encodeFields a `S.union` encodeFields b
193+ encodeFields opts (Product a b) = encodeFields opts a `S.union` encodeFields opts b
194194
195195instance genericCountArgsNoArguments :: GenericCountArgs NoArguments where
196196 countArgs _ = Left NoArguments
0 commit comments