@@ -32,7 +32,6 @@ import qualified Control.Monad.State as S
32import Data.Aeson
32import Data.Aeson
33import Data.Aeson.Types (Parser)
33import Data.Aeson.Types (Parser)
34import Data.Constraint
34import Data.Constraint
35−import Data.List (intercalate)
36import Data.Maybe (catMaybes)
35import Data.Maybe (catMaybes)
37import Data.Proxy
36import Data.Proxy
38import qualified Data.Text as T
37import qualified Data.Text as T
@@ -43,17 +42,11 @@ import GHC.OverloadedLabels
43import GHC.Prim
42import GHC.Prim
44import GHC.ST (ST (..), runST)
43import GHC.ST (ST (..), runST)
45import GHC.TypeLits
44import GHC.TypeLits
45+import Generic.Data (gshowsPrec)
46+import Generic.Data.Internal.Show (GShow)
46import qualified Optics.Lens as OL
47import qualified Optics.Lens as OL
47import Unsafe.Coerce
48import Unsafe.Coerce
48import Prelude
49import Prelude
49−#if MIN_VERSION_aeson(2,0,0)
50−import Data.Aeson.Key (fromText, fromString)
54−fromString :: String -> T.Text
58-- | Field named @l@ labels value of type @t@ adapted from the awesome /labels/ package.
51-- | Field named @l@ labels value of type @t@ adapted from the awesome /labels/ package.
59-- Example: @(#name := \"Chris\") :: (\"name\" := String)@
52-- Example: @(#name := \"Chris\") :: (\"name\" := String)@
@@ -109,12 +102,13 @@ defaultJSONOptions = JSONOptions {fieldTransform = id}
109type role Rec representational
102type role Rec representational
112− ( RecApply lts lts Show
105+ ( RecApply lts lts Show,
106+ GShow Proxy (Rep (Rec lts)),
114 Show (Rec lts)
109 Show (Rec lts)
116− show rec = "{" ++ formatted ++ "}"
111+ show = (\x -> if null x then "{}" else x) . unwords . drop 1 . words . flip (gshowsPrec 0) ""
117− where formatted = intercalate ", " $ map (\(k, v) -> k ++ " = " ++ v) $ showRec rec
119instance RecEq lts lts => Eq (Rec lts) where
113instance RecEq lts lts => Eq (Rec lts) where
120 (==) (a :: Rec lts) (b :: Rec lts) = recEq a b (Proxy :: Proxy lts)
114 (==) (a :: Rec lts) (b :: Rec lts) = recEq a b (Proxy :: Proxy lts)
@@ -566,16 +560,16 @@ class ToJSON a => EncodeField a where
567instance ToJSON a => EncodeField a where
561instance ToJSON a => EncodeField a where
568 encodeField = pure . toJSON
562 encodeField = pure . toJSON
569− encodeKV k v = fromText k .= v
563+ encodeKV = (.=)
571instance {-# OVERLAPS #-} ToJSON a => EncodeField (Maybe a) where
565instance {-# OVERLAPS #-} ToJSON a => EncodeField (Maybe a) where
572 encodeField = fmap toJSON
566 encodeField = fmap toJSON
573 encodeKV _ Nothing = mempty
567 encodeKV _ Nothing = mempty
574− encodeKV k v = fromText k .= v
568+ encodeKV k v = k .= v
576recToValue :: forall lts. (RecApply lts lts EncodeField) => JSONOptions -> Rec lts -> Value
570recToValue :: forall lts. (RecApply lts lts EncodeField) => JSONOptions -> Rec lts -> Value
577recToValue options r =
571recToValue 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
580recToEncoding :: forall lts. (RecApply lts lts EncodeField) => JSONOptions -> Rec lts -> Encoding
574recToEncoding :: forall lts. (RecApply lts lts EncodeField) => JSONOptions -> Rec lts -> Encoding
581recToEncoding options r =
575recToEncoding options r =
@@ -680,10 +674,10 @@ class FromJSON a => ParseField a where
680 parseField :: Object -> T.Text -> Parser a
674 parseField :: Object -> T.Text -> Parser a
682instance FromJSON a => ParseField a where
676instance FromJSON a => ParseField a where
683− parseField o k = o .: fromText k
677+ parseField = (.:)
685instance {-# OVERLAPS #-} FromJSON a => ParseField (Maybe a) where
679instance {-# OVERLAPS #-} FromJSON a => ParseField (Maybe a) where
686− parseField o k = o .:? fromText k
680+ parseField = (.:?)
689 ( KnownSymbol l,
683 ( KnownSymbol l,