@@ -1,6 +1,8 @@
11module Data.Aeson.Inflections
22 ( defaultFieldLabelModifier
33 , defaultFieldLabelModifier'
4+ , deriveDefaultJSON
5+ , deriveEnumJSON
46 , dropPrefix
57 , dropPrefixLower
68 , dropByPrefixLength
@@ -12,10 +14,13 @@ module Data.Aeson.Inflections
1214
1315import Control.Lens
1416import Control.Monad
17+import Data.Aeson
18+import Data.Aeson.TH
1519import Data.Char
1620import Data.Text (Text)
1721import qualified Data.Text as T (length, pack, unpack)
1822import Data.Void
23+import Language.Haskell.TH
1924import qualified Text.Inflections as I
2025import Text.Megaparsec.Error
2126
@@ -28,6 +33,14 @@ defaultFieldLabelModifier = toUnderscore . dropPrefix
2833defaultFieldLabelModifier' :: Text -> Text
2934defaultFieldLabelModifier' = T.pack . defaultFieldLabelModifier . T.unpack
3035
36+deriveDefaultJSON :: Name -> Q [Dec]
37+deriveDefaultJSON = deriveJSON defaultOptions
38+ { fieldLabelModifier = defaultFieldLabelModifier }
39+
40+deriveEnumJSON :: String -> Name -> Q [Dec]
41+deriveEnumJSON prefix = deriveJSON defaultOptions
42+ { constructorTagModifier = toUnderscore . cutPrefix prefix }
43+
3144-- | Just drops prefix
3245dropPrefix :: String -> String
3346dropPrefix = dropWhile (not . isUpper)