module TestTypes ( IncPK(..) , CompoundPK(..) , incFromList , compoundFromList ) where import qualified Data.Aeson as JSON import Data.Aeson ((.:)) import Data.Maybe (fromJust) import Control.Applicative ((<$>), (<*>)) import Control.Monad (mzero) import Database.HDBC (SqlValue, fromSql) data IncPK = IncPK { incId :: Int , incNullableStr :: Maybe String , incStr :: String , incInsert :: String } deriving (Eq, Show) instance JSON.FromJSON IncPK where parseJSON (JSON.Object r) = IncPK <$> r .: "id" <*> r .: "nullable_string" <*> r .: "non_nullable_string" <*> r .: "inserted_at" parseJSON _ = mzero incFromList :: [(String, SqlValue)] -> IncPK incFromList row = IncPK (fromSql . fromJust $ lookup "id" row) (fromSql . fromJust $ lookup "nullable_string" row) (fromSql . fromJust $ lookup "non_nullable_string" row) (fromSql . fromJust $ lookup "inserted_at" row) data CompoundPK = CompoundPK { compoundK1 :: Int , compoundK2 :: Int , compoundExtra :: Maybe Int } instance JSON.FromJSON CompoundPK where parseJSON (JSON.Object r) = CompoundPK <$> r .: "k1" <*> r .: "k2" <*> r .: "extra" parseJSON _ = mzero compoundFromList :: [(String, SqlValue)] -> CompoundPK compoundFromList row = CompoundPK (fromSql . fromJust $ lookup "k1" row) (fromSql . fromJust $ lookup "k2" row) (fromSql . fromJust $ lookup "extra" row)