Skip to content

Commit f336ea3

Browse files
committed
Change API
1 parent 8249bb4 commit f336ea3

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

src/Data/Codec/Argonaut/Sum.purs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
module Data.Codec.Argonaut.Sum
22
( Encoding(..)
3+
, FlatEncoding
34
, class GCases
45
, class GFields
6+
, class GFlatCases
57
, defaultEncoding
8+
, defaultFlatEncoding
69
, enumSum
710
, gCasesDecode
811
, gCasesEncode
912
, gFieldsDecode
1013
, gFieldsEncode
14+
, gFlatCasesDecode
15+
, gFlatCasesEncode
1116
, sum
17+
, sumFlat
18+
, sumFlatWith
1219
, sumWith
1320
, taggedSum
14-
, sumFlat
15-
, class GFlatCases
16-
, gFlatCasesEncode
17-
, gFlatCasesDecode
18-
) where
21+
)
22+
where
1923

2024
import Prelude
2125

@@ -398,8 +402,18 @@ encodeSumCase encoding tag jsons =
398402
encode jobject $ Obj.fromFoldable $ catMaybes
399403
[ tagEntry, valEntry ]
400404

401-
sumFlat @tag r rep a. GFlatCases tag r rep Generic a rep String Record r JsonCodec a
402-
sumFlat name r =
405+
type FlatEncoding (tagSymbol) =
406+
{ tag Proxy tag
407+
}
408+
409+
defaultFlatEncoding FlatEncoding "tag"
410+
defaultFlatEncoding = { tag: Proxy }
411+
412+
sumFlat r rep a. GFlatCases "tag" r rep Generic a rep String Record r JsonCodec a
413+
sumFlat = sumFlatWith defaultFlatEncoding
414+
415+
sumFlatWith @tag r rep a. GFlatCases tag r rep Generic a rep FlatEncoding tag -> String Record r JsonCodec a
416+
sumFlatWith _ name r =
403417
dimap from to $ codec' dec enc
404418
where
405419
dec = gFlatCasesDecode @tag r >>> (lmap $ Named name)

test/Test/Sum.purs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Data.Codec (decode, encode)
1010
import Data.Codec.Argonaut (JsonCodec)
1111
import Data.Codec.Argonaut as C
1212
import Data.Codec.Argonaut.Record as CR
13-
import Data.Codec.Argonaut.Sum (Encoding(..), defaultEncoding, sumFlat, sumWith)
13+
import Data.Codec.Argonaut.Sum (Encoding(..), defaultEncoding, sumFlat, sumFlatWith, sumWith)
1414
import Data.Generic.Rep (class Generic)
1515
import Data.Show.Generic (genericShow)
1616
import Data.String as Str
@@ -21,6 +21,8 @@ import Effect.Exception (error, throw)
2121
import Test.QuickCheck (class Arbitrary, arbitrary, quickCheck)
2222
import Test.QuickCheck.Arbitrary (genericArbitrary)
2323
import Test.Util (propCodec)
24+
import Type.Prelude (Proxy(..))
25+
import Type.Proxy (Proxy)
2426

2527
--------------------------------------------------------------------------------
2628

@@ -66,7 +68,7 @@ instance Show SampleFlat where
6668
show = genericShow
6769

6870
codecSampleFlat JsonCodec SampleFlat
69-
codecSampleFlat = sumFlat @"tag" "Sample"
71+
codecSampleFlat = sumFlatWith { tag: Proxy @"tag" } "Sample"
7072
{ "FlatFoo": unit
7173
, "FlatBar": CR.record { errors: C.int }
7274
, "FlatBaz": CR.record

0 commit comments

Comments
 (0)