X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTSN%2FXML%2FAutoRacingDriverList.hs;h=af4fb854ae0cf76544d893db0c5e35794ba875ad;hb=99eced1fcde33e5c5c63d8ae2853bda50eefec83;hp=327c358bcc1ed305d1b016cc5b462825c3162825;hpb=c864af7aa8a195cf441904479c416202590e9375;p=dead%2Fhtsn-import.git diff --git a/src/TSN/XML/AutoRacingDriverList.hs b/src/TSN/XML/AutoRacingDriverList.hs index 327c358..af4fb85 100644 --- a/src/TSN/XML/AutoRacingDriverList.hs +++ b/src/TSN/XML/AutoRacingDriverList.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE QuasiQuotes #-} @@ -36,6 +37,7 @@ import Database.Groundhog.Sqlite ( withSqliteConn ) import Database.Groundhog.TH ( groundhog, mkPersist ) +import qualified GHC.Generics as GHC ( Generic ) import Test.Tasty ( TestTree, testGroup ) import Test.Tasty.HUnit ( (@?=), testCase ) import Text.XML.HXT.Core ( @@ -50,6 +52,7 @@ import Text.XML.HXT.Core ( xpWrap ) -- Local imports. +import Generics ( Generic(..), prepend, to_tuple ) import TSN.Codegen ( tsn_codegen_config ) import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate ) import TSN.Picklers ( xp_date, xp_time_stamp ) @@ -101,7 +104,11 @@ data Message = xml_title :: String, xml_listings :: [AutoRacingDriverListListingXml], xml_time_stamp :: UTCTime } - deriving (Eq, Show) + deriving (Eq, GHC.Generic, Show) + +-- | For 'Generics.to_tuple'. +-- +instance Generic Message instance ToDb Message where @@ -136,37 +143,47 @@ instance XmlImport Message -- AutoRacingDriverListListing / AutoRacingDriverListListingXml -- | Database representation of a \ contained within a --- \. +-- \. The leading underscores prevent unused field +-- warnings. -- data AutoRacingDriverListListing = AutoRacingDriverListListing { - db_auto_racing_driver_lists_id :: DefaultKey AutoRacingDriverList, - db_driver_id :: Int, - db_driver :: String, - db_height :: Maybe String, - db_weight :: Int, - db_date_of_birth :: UTCTime, - db_hometown :: String, - db_nationality :: Maybe String, - db_car_number :: Int, - db_car :: String } + _db_auto_racing_driver_lists_id :: DefaultKey AutoRacingDriverList, + _db_driver_id :: Int, + _db_driver :: String, + _db_height :: Maybe String, + _db_weight :: Int, + _db_date_of_birth :: UTCTime, + _db_hometown :: String, + _db_nationality :: Maybe String, + _db_car_number :: Int, + _db_car :: String } + deriving ( GHC.Generic ) + +-- | For 'Generics.prepend'. +-- +instance Generic AutoRacingDriverListListing + -- | XML representation of a \ contained within a --- \. +-- \. The underscores prevent unused field warnings. -- data AutoRacingDriverListListingXml = AutoRacingDriverListListingXml { - xml_driver_id :: Int, - xml_driver :: String, - xml_height :: Maybe String, - xml_weight :: Int, - xml_date_of_birth :: UTCTime, - xml_hometown :: String, - xml_nationality :: Maybe String, - xml_car_number :: Int, - xml_car :: String } - deriving (Eq, Show) - + _xml_driver_id :: Int, + _xml_driver :: String, + _xml_height :: Maybe String, + _xml_weight :: Int, + _xml_date_of_birth :: UTCTime, + _xml_hometown :: String, + _xml_nationality :: Maybe String, + _xml_car_number :: Int, + _xml_car :: String } + deriving (Eq, GHC.Generic, Show) + +-- | For 'Generics.to_tuple'. +-- +instance Generic AutoRacingDriverListListingXml instance ToDb AutoRacingDriverListListingXml where -- | The database analogue of an 'AutoRacingDriverListListingXml' is @@ -187,18 +204,8 @@ instance FromXmlFk AutoRacingDriverListListingXml where -- 'AutoRacingDriverListListing', we add the foreign key and copy -- everything else verbatim. -- - from_xml_fk fk AutoRacingDriverListListingXml{..} = - AutoRacingDriverListListing { - db_auto_racing_driver_lists_id = fk, - db_driver_id = xml_driver_id, - db_driver = xml_driver, - db_height = xml_height, - db_weight = xml_weight, - db_date_of_birth = xml_date_of_birth, - db_hometown = xml_hometown, - db_nationality = xml_nationality, - db_car_number = xml_car_number, - db_car = xml_car } + from_xml_fk = prepend + -- | This allows us to insert the XML representation @@ -244,7 +251,7 @@ mkPersist tsn_codegen_config [groundhog| constructors: - name: AutoRacingDriverListListing fields: - - name: db_auto_racing_driver_lists_id + - name: _db_auto_racing_driver_lists_id reference: onDelete: cascade @@ -272,15 +279,6 @@ pickle_listing = (xpElem "Car" xpText) where from_tuple = uncurryN AutoRacingDriverListListingXml - to_tuple m = (xml_driver_id m, - xml_driver m, - xml_height m, - xml_weight m, - xml_date_of_birth m, - xml_hometown m, - xml_nationality m, - xml_car_number m, - xml_car m) -- | Pickler for the top-level 'Message'. -- @@ -297,13 +295,6 @@ pickle_message = (xpElem "time_stamp" xp_time_stamp) where from_tuple = uncurryN Message - to_tuple m = (xml_xml_file_id m, - xml_heading m, - xml_category m, - xml_sport m, - xml_title m, - xml_listings m, - xml_time_stamp m)