packages feed

deriving-aeson 0.2.6.1 → 0.2.7

raw patch · 6 files changed

+28/−6 lines, 6 filesdep ~aesondep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: aeson, base

API changes (from Hackage documentation)

+ Deriving.Aeson: data Rename (from :: Symbol) (to :: Symbol)
+ Deriving.Aeson: instance (GHC.TypeLits.KnownSymbol from, GHC.TypeLits.KnownSymbol to) => Deriving.Aeson.StringModifier (Deriving.Aeson.Rename from to)
+ Deriving.Aeson: instance Deriving.Aeson.StringModifier '[]
+ Deriving.Aeson: instance forall a1 (a2 :: a1) (as :: [a1]). (Deriving.Aeson.StringModifier a2, Deriving.Aeson.StringModifier as) => Deriving.Aeson.StringModifier (a2 : as)
- Deriving.Aeson.Stock: type PrefixedSnake str = CustomJSON '[FieldLabelModifier (StripPrefix str, CamelToSnake)]
+ Deriving.Aeson.Stock: type PrefixedSnake str = CustomJSON '[FieldLabelModifier '[StripPrefix str, CamelToSnake]]

Files

CHANGELOG.md view
@@ -1,5 +1,10 @@ # Revision history for deriving-aeson +## 0.2.7++* Added a `StringModifier` instance to a list of types+* Added `Rename :: Symbol -> Symbol -> Type`+ ## 0.2.6  * Added `StringModifier` instances to 3 and 4-tuples
README.md view
@@ -23,7 +23,7 @@   , userAPIToken :: Maybe String   } deriving Generic   deriving (FromJSON, ToJSON)-  via CustomJSON '[OmitNothingFields, FieldLabelModifier (StripPrefix "user", CamelToSnake)] User+  via CustomJSON '[OmitNothingFields, FieldLabelModifier '[StripPrefix "user", CamelToSnake]] User  testData :: [User] testData = [User 42 "Alice" Nothing, User 43 "Bob" (Just "xyz")]@@ -36,7 +36,7 @@  * `Prefixed str` = `CustomJSON '[FieldLabelModifier (StripPrefix str)]` * `PrefixedSnake str` = `CustomJSON '[FieldLabelModifier (StripPrefix str, CamelToSnake)]`-* `Snake` = `CustomJSON '[FieldLabelModifier (StripPrefix str, CamelToSnake)]`+* `Snake` = `CustomJSON '[FieldLabelModifier '[StripPrefix str, CamelToSnake]]` * `Vanilla` = `CustomJSON '[]`  How it works
deriving-aeson.cabal view
@@ -1,6 +1,6 @@ cabal-version:       2.4 name:                deriving-aeson-version:             0.2.6.1+version:             0.2.7 synopsis:            Type driven generic aeson instance customisation description:         This package provides a newtype wrapper with   FromJSON/ToJSON instances customisable via a phantom type parameter.
src/Deriving/Aeson.hs view
@@ -30,6 +30,7 @@   , CamelTo   , CamelToKebab   , CamelToSnake+  , Rename   -- * Interface   , AesonOptions(..)   , StringModifier(..)@@ -95,6 +96,9 @@ -- | CamelCase to kebab-case type CamelToKebab = CamelTo "-" +-- | Rename fields called @from@ to @to@.+data Rename (from :: Symbol) (to :: Symbol)+ -- | Reify a function which modifies names class StringModifier t where   getStringModifier :: String -> String@@ -102,6 +106,13 @@ instance KnownSymbol k => StringModifier (StripPrefix k) where   getStringModifier = fromMaybe <*> stripPrefix (symbolVal (Proxy @k)) +instance StringModifier '[] where+  getStringModifier = id++-- | Left-to-right (@'foldr' ('flip' ('.')) 'id'@) composition+instance (StringModifier a, StringModifier as) => StringModifier (a ': as) where+  getStringModifier = getStringModifier @as . getStringModifier @a+ -- | Left-to-right (@'flip' '.'@) composition instance (StringModifier a, StringModifier b) => StringModifier (a, b) where   getStringModifier = getStringModifier @b . getStringModifier @a@@ -118,6 +129,9 @@   getStringModifier = camelTo2 char     where       (char : _) = symbolVal (Proxy @separator)++instance (KnownSymbol from, KnownSymbol to) => StringModifier (Rename from to) where+  getStringModifier s = if s == symbolVal (Proxy @from) then symbolVal (Proxy @to) else s  type family NonEmptyString (xs :: Symbol) :: Constraint where   NonEmptyString "" = TypeError ('Text "Empty string separator provided for camelTo separator")
src/Deriving/Aeson/Stock.hs view
@@ -18,7 +18,7 @@ type Prefixed str = CustomJSON '[FieldLabelModifier (StripPrefix str)]  -- | Strip @str@ prefices and convert from CamelCase to snake_case-type PrefixedSnake str = CustomJSON '[FieldLabelModifier (StripPrefix str, CamelToSnake)]+type PrefixedSnake str = CustomJSON '[FieldLabelModifier '[StripPrefix str, CamelToSnake]]  -- | Convert from CamelCase to snake_case type Snake = CustomJSON '[FieldLabelModifier CamelToSnake]
tests/test.hs view
@@ -12,9 +12,12 @@   { userId :: Int   , userName :: String   , userAPIToken :: Maybe String+  , userType :: String   } deriving Generic   deriving (FromJSON, ToJSON)-  via CustomJSON '[OmitNothingFields, FieldLabelModifier (StripPrefix "user", CamelToSnake)] User+  via CustomJSON '[ OmitNothingFields+                  , FieldLabelModifier '[StripPrefix "user", CamelToSnake, Rename "type" "user_type"]+                  ] User  data Foo = Foo { fooFoo :: Int, fooBar :: Int }   deriving Generic@@ -22,7 +25,7 @@   via Prefixed "foo" Foo  testData :: [User]-testData = [User 42 "Alice" Nothing, User 43 "Bob" (Just "xyz")]+testData = [User 42 "Alice" Nothing "human", User 43 "Bob" (Just "xyz") "bot"]  main = do   BL.putStrLn $ encode testData