packages feed

RJson 0.3.1 → 0.3.2

raw patch · 2 files changed

+39/−11 lines, 2 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Text.RJson: firstCharToLower :: String -> String
+ Text.RJson: firstCharToUpper :: String -> String
- Text.RJson: enumFromJson :: (Data FromJsonD a, Data TranslateFieldD a) => a -> JsonData -> Either String a
+ Text.RJson: enumFromJson :: (Data FromJsonD a, Data TranslateFieldD a) => (String -> String) -> a -> JsonData -> Either String a
- Text.RJson: enumToJson :: (Data ToJsonD a, ToJson a, TranslateField a) => a -> JsonData
+ Text.RJson: enumToJson :: (Data ToJsonD a, ToJson a, TranslateField a) => (String -> String) -> a -> JsonData

Files

RJson.cabal view
@@ -1,5 +1,5 @@ Name:          RJson-Version:       0.3.1+Version:       0.3.2 Cabal-Version: >= 1.2 License:       BSD3 License-File:  LICENSE
Text/RJson.hs view
@@ -31,6 +31,8 @@                    enumFromJson,                    stripInitialUnderscores,                    toJsonString,+                   firstCharToUpper,+                   firstCharToLower,                    Union(..), Union3, Union4, Union5, Union6,                    Union7,Union8,Union9,Union10) where@@ -288,10 +290,11 @@             error ("Unable to serialize the primitive type '" ++ typename x ++ "'")  -- | This function can be used as an implementation of 'toJson' for simple enums.---   It just converts an enum value to a string determined by the name of the constructor.-enumToJson :: (Data ToJsonD a, ToJson a, TranslateField a) => a -> JsonData-enumToJson x-    | isAlgType (dataTypeOf toJsonProxy x) = JDString (show (toConstr toJsonProxy x))+--   It just converts an enum value to a string determined by the name of the constructor,+--   after being fed through the (String -> String) function given as the first argument.+enumToJson :: (Data ToJsonD a, ToJson a, TranslateField a) => (String -> String) -> a -> JsonData+enumToJson transform x+    | isAlgType (dataTypeOf toJsonProxy x) = JDString (transform (showConstr (toConstr toJsonProxy x)))     | True = error "Passed non-algebraic type to enumToJson"  instance (Data ToJsonD t, TranslateField t) => ToJson t where@@ -522,13 +525,20 @@       _            -> Left "Bad fromJson conversion: Non-algebraic datatype given to 'genericFromJson'" genericFromJson _ _ = Left "Bad fromJson conversion: Expecting JSON object or array" +constrNames :: (Data FromJsonD a, Data TranslateFieldD a) => a -> [String]+constrNames x = map showConstr (dataTypeConstrs (dataTypeOf fromJsonProxy x))+ -- | The counterpart of 'enumToJson'.-enumFromJson :: (Data FromJsonD a, Data TranslateFieldD a) => a -> JsonData -> Either String a-enumFromJson dummy (JDString s) =-    case fromConstrM fromJsonProxy Nothing (mkConstr (dataTypeOf fromJsonProxy dummy) s [] Prefix ) of-      Nothing -> Left "Error in enumFromJson"-      Just x -> Right x-enumFromJson _ _ = Left "Non-string given to enumFromJson"+enumFromJson :: (Data FromJsonD a, Data TranslateFieldD a) => (String -> String) -> a -> JsonData -> Either String a+enumFromJson transform dummy (JDString s) =+    let cname = (transform s) in+    if elem cname (constrNames dummy)+       then+           case fromConstrM fromJsonProxy Nothing (mkConstr (dataTypeOf fromJsonProxy dummy) cname [] Prefix ) of+             Nothing -> Left "Error in enumFromJson"+             Just x -> Right x+       else Left "Constructor name not recognized in enumFromJson"+enumFromJson _ _ _ = Left "Non-string given to enumFromJson"            instance (Data FromJsonD t, Data TranslateFieldD t) => FromJson t where     fromJson = genericFromJson@@ -729,9 +739,27 @@ toJsonString :: ToJson a => a -> String toJsonString = show . toJson ++--+-- A couple of utility functions.+--+firstCharToUpper :: String -> String+firstCharToUpper "" = ""+firstCharToUpper (c:cs) = (toUpper c) : cs++firstCharToLower :: String -> String+firstCharToLower "" = ""+firstCharToLower (c:cs) = (toLower c) : cs+ {- data Test = Foo | Bar deriving Show $(derive[''Test])++instance ToJson Test where+    toJson = enumToJson firstCharToLower+instance FromJson Test where+    fromJson = enumFromJson firstCharToUpper+ data Test2 = Test2 Int Int deriving Show $(derive[''Test2]) data Test4 = Test4 { z :: String } deriving Show