1
+ {-# LANGUAGE CPP #-}
1
2
{-# LANGUAGE DefaultSignatures #-}
2
3
{-# LANGUAGE DeriveGeneric #-}
3
4
{-# LANGUAGE FlexibleInstances #-}
@@ -71,6 +72,11 @@ import qualified Data.Aeson as A (Encoding, FromJSON (..),
71
72
import qualified Data.Aeson.Encoding as E
72
73
import qualified Data.Aeson.Encoding.Internal as E
73
74
import qualified Data.Aeson.Internal as A (formatError , iparse )
75
+ #if MIN_VERSION_aeson(2,0,0)
76
+ import qualified Data.Aeson.Key as A
77
+ #else
78
+ import qualified Data.Aeson.Encoding.Internal as E
79
+ #endif
74
80
import qualified Data.Aeson.Parser as A (eitherDecodeWith )
75
81
import qualified Data.Aeson.Types as A (Object , Pair , Parser ,
76
82
Series ,
@@ -102,6 +108,16 @@ import Proto3.Suite.Types (Enumerated (..), Fixed (..))
102
108
import Proto3.Wire.Class (ProtoEnum (.. ))
103
109
import Test.QuickCheck.Arbitrary (Arbitrary (.. ))
104
110
111
+ #if MIN_VERSION_aeson(2,0,0)
112
+ type Key = A. Key
113
+ keyFromText :: Text -> Key
114
+ keyFromText = A. fromText
115
+ #else
116
+ type Key = Text
117
+ keyFromText :: Text -> Text
118
+ keyFromText = id
119
+ #endif
120
+
105
121
-- * Typeclass definitions
106
122
107
123
-- | 'A.ToJSON' variant for JSONPB direct encoding via 'A.Encoding'
@@ -164,8 +180,8 @@ eitherDecode = eitherFormatError . A.eitherDecodeWith jsonEOF (A.iparse parseJSO
164
180
class Monoid m => KeyValuePB m where
165
181
pair :: ToJSONPB v => Text -> v -> Options -> m
166
182
167
- instance KeyValuePB A. Series where pair k v opts = E. pair k (toEncodingPB v opts)
168
- instance KeyValuePB [A. Pair ] where pair k v opts = pure (k, toJSONPB v opts)
183
+ instance KeyValuePB A. Series where pair k v opts = E. pair (keyFromText k) (toEncodingPB v opts)
184
+ instance KeyValuePB [A. Pair ] where pair k v opts = pure (keyFromText k, toJSONPB v opts)
169
185
170
186
-- | Construct a monoidal key-value pair, using 'mempty' to represent omission
171
187
-- of default values (unless the given 'Options' force their emission).
@@ -183,12 +199,12 @@ k .= v = mk
183
199
-- object, or if it is present but its value is null, we produce the default
184
200
-- protobuf value for the field type
185
201
(.:) :: (FromJSONPB a , HasDefault a ) => A. Object -> Text -> A. Parser a
186
- obj .: key = obj .:? key A. .!= def
202
+ obj .: key = obj .:? keyFromText key A. .!= def
187
203
where
188
204
(.:?) = A. explicitParseFieldMaybe parseJSONPB
189
205
190
206
parseField :: FromJSONPB a
191
- => A. Object -> Text -> A. Parser a
207
+ => A. Object -> Key -> A. Parser a
192
208
parseField = A. explicitParseField parseJSONPB
193
209
194
210
-- | >>> isDefault (def @E.Encoding)
0 commit comments