{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}
module Test.Types.MismatchedToAndFromSerialization where

import           Data.Aeson
import           GHC.Generics
import           Test.QuickCheck
import           Test.QuickCheck.Arbitrary.ADT

data Person = Person {
  name :: String
, age  :: Int
} deriving (Eq,Show,Generic)

-- ToJSON and FromJSON use different strings, this should break.
instance ToJSON Person where
  toJSON (Person name' age') = object [
       "personName" .= name'
    ,  "personAge"  .= age'
    ]

instance FromJSON Person where
  parseJSON = withObject "Expected a Person object" $ \o ->
    Person <$> o .: "name"
           <*> o .: "age"

instance ToADTArbitrary Person
instance Arbitrary Person where
  arbitrary = genericArbitrary