on master help sign in
Fix id_ breakage in benchmarks (#562)
a2955fbOleg Grenrus
benchmarks/Typed/Generic.hs+1−1
@@ -7,7 +7,7 @@ import Prelude.Compat
7import "aeson" Data.Aeson hiding (Result)
7import "aeson" Data.Aeson hiding (Result)
8import Criterion
8import Criterion
9import Data.ByteString.Lazy as L
9import Data.ByteString.Lazy as L
10−import Twitter.TH
10+import Twitter.Generic
11import Typed.Common
11import Typed.Common
12import qualified "aeson-benchmarks" Data.Aeson as B
12import qualified "aeson-benchmarks" Data.Aeson as B
13
13
benchmarks/aeson-benchmarks.cabal+2
@@ -125,7 +125,9 @@ executable aeson-benchmark-typed
125 cpp-options: -DHAS_BOTH_AESON_AND_BENCHMARKS
125 cpp-options: -DHAS_BOTH_AESON_AND_BENCHMARKS
126 other-modules:
126 other-modules:
127 Twitter
127 Twitter
128+ Twitter.Generic
128 Twitter.Manual
129 Twitter.Manual
130+ Twitter.Options
129 Twitter.TH
131 Twitter.TH
130 Typed.Common
132 Typed.Common
131 Typed.Generic
133 Typed.Generic
examples/Twitter/Generic.hs+47−19
@@ -1,5 +1,8 @@
1-- Use GHC generics to automatically generate good instances.
1-- Use GHC generics to automatically generate good instances.
2+
2{-# LANGUAGE CPP #-}
3{-# LANGUAGE CPP #-}
4+{-# LANGUAGE PackageImports #-}
5+
3{-# OPTIONS_GHC -fno-warn-orphans #-}
6{-# OPTIONS_GHC -fno-warn-orphans #-}
4
7
5module Twitter.Generic
8module Twitter.Generic
@@ -11,39 +14,64 @@ module Twitter.Generic
11 ) where
14 ) where
12
15
13import Prelude ()
16import Prelude ()
14−import Prelude.Compat
17+import Prelude.Compat ()
15
18
16import Twitter
19import Twitter
20+import Twitter.Options
17
21
18#ifndef HAS_BOTH_AESON_AND_BENCHMARKS
22#ifndef HAS_BOTH_AESON_AND_BENCHMARKS
19−import Data.Aeson (ToJSON, FromJSON)
23+import Data.Aeson (ToJSON (..), FromJSON (..), genericToJSON, genericToEncoding, genericParseJSON)
20#else
24#else
21−import "aeson" Data.Aeson (ToJSON, FromJSON)
25+import "aeson" Data.Aeson (ToJSON (..), FromJSON (..), genericToJSON, genericToEncoding, genericParseJSON)
22import qualified "aeson-benchmarks" Data.Aeson as B
26import qualified "aeson-benchmarks" Data.Aeson as B
23#endif
27#endif
24
28
25−instance ToJSON Metadata
29+instance ToJSON Metadata where
30+ toJSON = genericToJSON twitterOptions
31+ toEncoding = genericToEncoding twitterOptions
26−instance FromJSON Metadata
32+instance FromJSON Metadata where
33+ parseJSON = genericParseJSON twitterOptions
27
34
28−instance ToJSON Geo
35+instance ToJSON Geo where
36+ toJSON = genericToJSON twitterOptions
37+ toEncoding = genericToEncoding twitterOptions
29−instance FromJSON Geo
38+instance FromJSON Geo where
39+ parseJSON = genericParseJSON twitterOptions
30
40
31−instance ToJSON Story
41+instance ToJSON Story where
42+ toJSON = genericToJSON twitterOptions
43+ toEncoding = genericToEncoding twitterOptions
32−instance FromJSON Story
44+instance FromJSON Story where
45+ parseJSON = genericParseJSON twitterOptions
33
46
34−instance ToJSON Result
47+instance ToJSON Result where
48+ toJSON = genericToJSON twitterOptions
49+ toEncoding = genericToEncoding twitterOptions
35−instance FromJSON Result
50+instance FromJSON Result where
51+ parseJSON = genericParseJSON twitterOptions
36
52
37#ifdef HAS_BOTH_AESON_AND_BENCHMARKS
53#ifdef HAS_BOTH_AESON_AND_BENCHMARKS
38−instance B.ToJSON Metadata
54+instance B.ToJSON Metadata where
55+ toJSON = B.genericToJSON btwitterOptions
56+ toEncoding = B.genericToEncoding btwitterOptions
39−instance B.FromJSON Metadata
57+instance B.FromJSON Metadata where
58+ parseJSON = B.genericParseJSON btwitterOptions
40
59
41−instance B.ToJSON Geo
60+instance B.ToJSON Geo where
61+ toJSON = B.genericToJSON btwitterOptions
62+ toEncoding = B.genericToEncoding btwitterOptions
42−instance B.FromJSON Geo
63+instance B.FromJSON Geo where
64+ parseJSON = B.genericParseJSON btwitterOptions
43
65
44−instance B.ToJSON Story
66+instance B.ToJSON Story where
67+ toJSON = B.genericToJSON btwitterOptions
68+ toEncoding = B.genericToEncoding btwitterOptions
45−instance B.FromJSON Story
69+instance B.FromJSON Story where
70+ parseJSON = B.genericParseJSON btwitterOptions
46
71
47−instance B.ToJSON Result
72+instance B.ToJSON Result where
73+ toJSON = B.genericToJSON btwitterOptions
74+ toEncoding = B.genericToEncoding btwitterOptions
48−instance B.FromJSON Result
75+instance B.FromJSON Result where
76+ parseJSON = B.genericParseJSON btwitterOptions
49#endif
77#endif
examples/Twitter/Options.hsnew file+29
@@ -0,0 +1,29 @@
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE PackageImports #-}
3+module Twitter.Options (module Twitter.Options) where
4+
5+#ifndef HAS_BOTH_AESON_AND_BENCHMARKS
6+import Data.Aeson
7+import Data.Aeson.Types
8+#else
9+import "aeson" Data.Aeson
10+import "aeson" Data.Aeson.Types
11+import qualified "aeson-benchmarks" Data.Aeson as B
12+import qualified "aeson-benchmarks" Data.Aeson.Types as B
13+#endif
14+
15+twitterOptions :: Options
16+twitterOptions = defaultOptions
17+ { fieldLabelModifier = \x -> case x of
18+ "id_" -> "id"
19+ _ -> x
20+ }
21+
22+#ifdef HAS_BOTH_AESON_AND_BENCHMARKS
23+btwitterOptions :: B.Options
24+btwitterOptions = B.defaultOptions
25+ { B.fieldLabelModifier = \x -> case x of
26+ "id_" -> "id"
27+ _ -> x
28+ }
29+#endif
examples/Twitter/TH.hs+9−8
@@ -16,6 +16,7 @@ module Twitter.TH
16import Prelude ()
16import Prelude ()
17
17
18import Twitter
18import Twitter
19+import Twitter.Options
19
20
20#ifndef HAS_BOTH_AESON_AND_BENCHMARKS
21#ifndef HAS_BOTH_AESON_AND_BENCHMARKS
21import Data.Aeson.TH
22import Data.Aeson.TH
@@ -24,14 +25,14 @@ import "aeson" Data.Aeson.TH
24import qualified "aeson-benchmarks" Data.Aeson.TH as B
25import qualified "aeson-benchmarks" Data.Aeson.TH as B
25#endif
26#endif
26
27
27−$(deriveJSON defaultOptions ''Metadata)
28+$(deriveJSON twitterOptions ''Metadata)
28−$(deriveJSON defaultOptions ''Geo)
29+$(deriveJSON twitterOptions ''Geo)
29−$(deriveJSON defaultOptions ''Story)
30+$(deriveJSON twitterOptions ''Story)
30−$(deriveJSON defaultOptions ''Result)
31+$(deriveJSON twitterOptions ''Result)
31
32
32#ifdef HAS_BOTH_AESON_AND_BENCHMARKS
33#ifdef HAS_BOTH_AESON_AND_BENCHMARKS
33−$(B.deriveJSON B.defaultOptions ''Metadata)
34+$(B.deriveJSON btwitterOptions ''Metadata)
34−$(B.deriveJSON B.defaultOptions ''Geo)
35+$(B.deriveJSON btwitterOptions ''Geo)
35−$(B.deriveJSON B.defaultOptions ''Story)
36+$(B.deriveJSON btwitterOptions ''Story)
36−$(B.deriveJSON B.defaultOptions ''Result)
37+$(B.deriveJSON btwitterOptions ''Result)
37#endif
38#endif