{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}
module Test.Types.BrokenSerialization 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)

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 .: "personName"
           <*> o .: "personAge"

instance ToADTArbitrary Person
instance Arbitrary Person where
  arbitrary = genericArbitrary

data SumType = SumType1 Int
             | SumType2 String Int
             | SumType3 Double String Int
  deriving (Eq,Show,Generic)

instance ToJSON SumType
instance FromJSON SumType
instance ToADTArbitrary SumType
instance Arbitrary SumType where
  arbitrary = genericArbitrary