{-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} module TSN.Injuries where import Database.Persist.TH ( mkDeleteCascade, mkMigrate, mkPersist, persistLowerCase, share, sqlOnlySettings ) import Text.XML.HXT.Core ( PU, XmlPickler(..), xp4Tuple, xp6Tuple, xpElem, xpList, xpPrim, xpText, xpWrap ) import Uncurry (uncurry4, uncurry5, uncurry6) share [mkPersist sqlOnlySettings, mkDeleteCascade sqlOnlySettings, mkMigrate "migrate_injuries"] [persistLowerCase| InjuriesListing team String teamno Int injuries String updated Bool deriving Show InjuriesMessage xml_file_id Int heading String category String sport String listings [InjuriesListing] time_stamp String deriving Show |] pickle_injurieslisting :: PU InjuriesListing pickle_injurieslisting = xpElem "listing" $ xpWrap (uncurry4 InjuriesListing, \l -> (injuriesListingTeam l, injuriesListingTeamno l, injuriesListingInjuries l, injuriesListingUpdated l)) $ xp4Tuple (xpElem "team" xpText) (xpElem "teamno" xpPrim) (xpElem "injuries" xpText) (xpElem "updated" xpPrim) instance XmlPickler InjuriesListing where xpickle = pickle_injurieslisting pickle_injuriesmessage :: PU InjuriesMessage pickle_injuriesmessage = xpElem "message" $ xpWrap (uncurry6 InjuriesMessage, \m -> (injuriesMessageXml_file_id m, injuriesMessageHeading m, injuriesMessageCategory m, injuriesMessageSport m, injuriesMessageListings m, injuriesMessageTime_stamp m)) $ xp6Tuple (xpElem "XML_File_ID" xpPrim) (xpElem "heading" xpText) (xpElem "category" xpText) (xpElem "sport" xpText) (xpList pickle_injurieslisting) (xpElem "time_stamp" xpText) instance XmlPickler InjuriesMessage where xpickle = pickle_injuriesmessage