Skip to content

Commit 15b04fe

Browse files
Added Json.objectFromList
1 parent ac3de16 commit 15b04fe

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/Json.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ module Json
4040
, text
4141
, shortText
4242
-- * Object Construction
43+
, objectFromList
4344
, object1
4445
, object2
4546
, object3
@@ -453,6 +454,10 @@ w16ToChar (GHC.Word.Compat.W16# w) = C# (chr# (word2Int# w))
453454
pattern (:->) :: ShortText -> Value -> Member
454455
pattern key :-> value = Member{key,value}
455456

457+
-- | Construct a JSON object from a list of members.
458+
objectFromList :: [Member] -> Value
459+
objectFromList ms = Object $ PM.smallArrayFromList ms
460+
456461
-- | Construct a JSON object with one member.
457462
object1 :: Member -> Value
458463
{-# inline object1 #-}

test/Main.hs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,26 @@ tests = testGroup "Tests"
123123
@=?
124124
BChunks.concat (Builder.run 4 (J.encode (J.String "It\2019s over now")))
125125
]
126+
, testGroup "objectFromList"
127+
[ THU.testCase "empty object" $
128+
J.objectFromList []
129+
@=?
130+
J.emptyObject
131+
, THU.testCase "one member" $
132+
J.objectFromList [J.Member {J.key = "one", J.value = J.String "value1"}]
133+
@=?
134+
J.object1 J.Member {J.key = "one", J.value = J.String "value1"}
135+
, THU.testCase "two members" $ do
136+
let members = [
137+
J.Member {J.key = "1", J.value = J.String "1"},
138+
J.Member {J.key = "2", J.value = J.String "2"}
139+
]
140+
J.objectFromList members
141+
@=?
142+
J.object2
143+
J.Member {J.key = "1", J.value = J.String "1"}
144+
J.Member {J.key = "2", J.value = J.String "2"}
145+
]
126146
, testGroup "smile-fragment"
127147
[ THU.testCase "biginteger-65535" $
128148
let enc = BChunks.concat (Builder.run 128 (Smile.encodeBigInteger 65535))

0 commit comments

Comments
 (0)