@@ -32,7 +32,6 @@ import qualified Control.Monad.State as S
3232import Data.Aeson
3333import Data.Aeson.Types (Parser)
3434import Data.Constraint
35−import Data.List (intercalate)
3635import Data.Maybe (catMaybes)
3736import Data.Proxy
3837import qualified Data.Text as T
@@ -43,17 +42,11 @@ import GHC.OverloadedLabels
4342import GHC.Prim
4443import GHC.ST (ST (..), runST)
4544import GHC.TypeLits
45+import Generic.Data (gshowsPrec)
46+import Generic.Data.Internal.Show (GShow)
4647import qualified Optics.Lens as OL
4748import Unsafe.Coerce
4849import Prelude
49−#if MIN_VERSION_aeson(2,0,0)
50−import Data.Aeson.Key (fromText, fromString)
51−#else
52−fromText :: a -> a
53−fromText = id
54−fromString :: String -> T.Text
55−fromString = T.pack
56−#endif
5750
5851-- | Field named @l@ labels value of type @t@ adapted from the awesome /labels/ package.
5952-- Example: @(#name := \"Chris\") :: (\"name\" := String)@
@@ -109,12 +102,13 @@ defaultJSONOptions = JSONOptions {fieldTransform = id}
109102type role Rec representational
110103
111104instance
112− ( RecApply lts lts Show
105+ ( RecApply lts lts Show,
106+ GShow Proxy (Rep (Rec lts)),
107+ Generic (Rec lts)
113108 ) =>
114109 Show (Rec lts)
115110 where
116− show rec = "{" ++ formatted ++ "}"
117− where formatted = intercalate ", " $ map (\(k, v) -> k ++ " = " ++ v) $ showRec rec
111+ show = (\x -> if null x then "{}" else x) . unwords . drop 1 . words . flip (gshowsPrec 0) ""
118112
119113instance RecEq lts lts => Eq (Rec lts) where
120114 (==) (a :: Rec lts) (b :: Rec lts) = recEq a b (Proxy :: Proxy lts)
@@ -566,16 +560,16 @@ class ToJSON a => EncodeField a where
566560
567561instance ToJSON a => EncodeField a where
568562 encodeField = pure . toJSON
569− encodeKV k v = fromText k .= v
563+ encodeKV = (.=)
570564
571565instance {-# OVERLAPS #-} ToJSON a => EncodeField (Maybe a) where
572566 encodeField = fmap toJSON
573567 encodeKV _ Nothing = mempty
574− encodeKV k v = fromText k .= v
568+ encodeKV k v = k .= v
575569
576570recToValue :: forall lts. (RecApply lts lts EncodeField) => JSONOptions -> Rec lts -> Value
577571recToValue options r =
578− object $ catMaybes $ reflectRec @EncodeField Proxy (\k v -> (fromString (fieldTransform options k),) <$> encodeField v) r
572+ object $ catMaybes $ reflectRec @EncodeField Proxy (\k v -> (T.pack (fieldTransform options k),) <$> encodeField v) r
579573
580574recToEncoding :: forall lts. (RecApply lts lts EncodeField) => JSONOptions -> Rec lts -> Encoding
581575recToEncoding options r =
@@ -680,10 +674,10 @@ class FromJSON a => ParseField a where
680674 parseField :: Object -> T.Text -> Parser a
681675
682676instance FromJSON a => ParseField a where
683− parseField o k = o .: fromText k
677+ parseField = (.:)
684678
685679instance {-# OVERLAPS #-} FromJSON a => ParseField (Maybe a) where
686− parseField o k = o .:? fromText k
680+ parseField = (.:?)
687681
688682instance
689683 ( KnownSymbol l,