X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTSN%2FXML%2FInjuries.hs;h=368f8460c1cb95876eec92c2a6ed22dd663eed47;hb=8b7fa6040be218653c0d385134ea895d93f70bf7;hp=6ae9118ed7bfdba3084275d0f5d3636f928f7258;hpb=fa27649ae583f6bdc20c54db4fc8f38a382a536c;p=dead%2Fhtsn-import.git diff --git a/src/TSN/XML/Injuries.hs b/src/TSN/XML/Injuries.hs index 6ae9118..368f846 100644 --- a/src/TSN/XML/Injuries.hs +++ b/src/TSN/XML/Injuries.hs @@ -1,9 +1,9 @@ +{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RecordWildCards #-} -{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} @@ -41,6 +41,7 @@ import Database.Groundhog.Generic ( runDbConn ) import Database.Groundhog.TH ( groundhog, mkPersist ) +import qualified GHC.Generics as GHC ( Generic ) import Database.Groundhog.Sqlite ( withSqliteConn ) import Data.Tuple.Curry ( uncurryN ) import Test.Tasty ( TestTree, testGroup ) @@ -60,11 +61,13 @@ import Text.XML.HXT.Core ( xpWrap ) -- Local imports. +import Generics ( Generic(..), to_tuple ) import TSN.Codegen ( tsn_codegen_config ) import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate ) import TSN.Picklers ( xp_time_stamp ) import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) ) import Xml ( + Child(..), FromXml(..), FromXmlFk(..), ToDb(..), @@ -102,10 +105,16 @@ data InjuriesTeam = data InjuriesListingXml = InjuriesListingXml { xml_team :: InjuriesTeam, - xml_teamno :: Maybe Int, + xml_teamno :: Maybe String, -- ^ Can contain non-numerics, e.g. \"ZR2\" xml_injuries :: String, xml_updated :: Maybe Bool } - deriving (Eq, Show) + deriving (Eq, GHC.Generic, Show) + + +-- | For 'Generics.to_tuple'. +-- +instance Generic InjuriesListingXml + -- | Database representation of a 'InjuriesListing'. It possesses a -- foreign key to an 'Injuries' object so that we can easily delete @@ -115,7 +124,7 @@ data InjuriesListing = InjuriesListing { db_injuries_id :: DefaultKey Injuries, db_team :: InjuriesTeam, - db_teamno :: Maybe Int, + db_teamno :: Maybe String, -- ^ Can contain non-numerics, e.g. \"ZR2\" db_injuries :: String, db_updated :: Maybe Bool } @@ -123,10 +132,11 @@ instance ToDb InjuriesListingXml where -- | The DB analogue of a 'InjuriesListingXml' is a 'InjuriesListing' type Db InjuriesListingXml = InjuriesListing -instance FromXmlFk InjuriesListingXml where +instance Child InjuriesListingXml where -- | Our foreign key points to an 'Injuries'. type Parent InjuriesListingXml = Injuries +instance FromXmlFk InjuriesListingXml where -- | To convert between a 'InjuriesListingXml' and a -- 'InjuriesListing', we simply append the foreign key. from_xml_fk fk InjuriesListingXml{..} = @@ -155,7 +165,13 @@ data Message = xml_sport :: String, xml_listings :: [InjuriesListingXml], xml_time_stamp :: UTCTime } - deriving (Eq, Show) + deriving (Eq, GHC.Generic, Show) + + +-- | For 'Generics.to_tuple'. +-- +instance Generic Message + -- | Database representation of a 'Message'. -- @@ -248,12 +264,13 @@ mkPersist tsn_codegen_config [groundhog| pickle_injuries_team :: PU InjuriesTeam pickle_injuries_team = xpElem "team" $ - xpWrap (from_tuple, to_tuple) $ + xpWrap (from_tuple, to_tuple') $ xpPair xpText (xpAttrImplied "league" xpText) where from_tuple = uncurryN InjuriesTeam - to_tuple m = (db_team_name m, db_team_league m) + -- Pointless, but silences two unused field warnings. + to_tuple' InjuriesTeam{..} = (db_team_name, db_team_league) -- | A pickler for 'InjuriesListingXml's that can convert them to/from -- XML. @@ -263,12 +280,12 @@ pickle_listing = xpElem "listing" $ xpWrap (from_tuple, to_tuple) $ xp4Tuple pickle_injuries_team - (xpOption $ xpElem "teamno" xpInt) + (xpOption $ xpElem "teamno" xpText) (xpElem "injuries" xpText) (xpOption $ xpElem "updated" xpPrim) where from_tuple = uncurryN InjuriesListingXml - to_tuple l = (xml_team l, xml_teamno l, xml_injuries l, xml_updated l) + -- | A pickler for 'Message's that can convert them to/from XML. @@ -285,12 +302,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_listings m, - xml_time_stamp m) --