cypher-0.1: Haskell bindings for the neo4j "cypher" query language

Safe HaskellNone

Data.Aeson.TH.Smart

Synopsis

Documentation

deriveJSONSource

Arguments

:: (String -> String)

Function to change field names.

-> Name

Name of the type for which to generate ToJSON and FromJSON instances.

-> Q [Dec] 

Generates both ToJSON and FromJSON instance declarations for the given data type.

This is a convienience function which is equivalent to calling both deriveToJSON and deriveFromJSON.

deriveToJSONSource

Arguments

:: (String -> String)

Function to change field names.

-> Name

Name of the type for which to generate a ToJSON instance declaration.

-> Q [Dec] 

Generates a ToJSON instance declaration for the given data type.

Example:

 data Foo = Foo Char Int
 $(deriveToJSON id ''Foo)

This will splice in the following code:

 instance ToJSON Foo where
      toJSON =
          value -> case value of
                      Foo arg1 arg2 -> Array $ create $ do
                        mv <- unsafeNew 2
                        unsafeWrite mv 0 (toJSON arg1)
                        unsafeWrite mv 1 (toJSON arg2)
                        return mv

deriveFromJSONSource

Arguments

:: (String -> String)

Function to change field names.

-> Name

Name of the type for which to generate a FromJSON instance declaration.

-> Q [Dec] 

Generates a FromJSON instance declaration for the given data type.

Example:

 data Foo = Foo Char Int
 $(deriveFromJSON id ''Foo)

This will splice in the following code:

 instance FromJSON Foo where
     parseJSON =
         value -> case value of
                     Array arr ->
                       if (V.length arr == 2)
                       then Foo <$> parseJSON (arr unsafeIndex 0)
                                <*> parseJSON (arr unsafeIndex 1)
                       else fail "<error message>"
                     other -> fail "<error message>"

mkToJSONSource

Arguments

:: (String -> String)

Function to change field names.

-> Name

Name of the type to encode.

-> Q Exp 

Generates a lambda expression which encodes the given data type as JSON.

Example:

 data Foo = Foo Int
 encodeFoo :: Foo -> Value
 encodeFoo = $(mkToJSON id ''Foo)

This will splice in the following code:

 value -> case value of Foo arg1 -> toJSON arg1

mkParseJSONSource

Arguments

:: (String -> String)

Function to change field names.

-> Name

Name of the encoded type.

-> Q Exp 

Generates a lambda expression which parses the JSON encoding of the given data type.

Example:

 data Foo = Foo Int
 parseFoo :: Value -> Parser Foo
 parseFoo = $(mkParseJSON id ''Foo)

This will splice in the following code:

 \value -> case value of arg -> Foo <$> parseJSON arg