X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTSN%2FPicklers.hs;h=1193abf3c203db8029a8f43589ae89c5f6859c95;hb=e3272460a03b4bdded1902467310a4190feb333f;hp=5c31198779c29ec377b44d30de99395b6f4a77a6;hpb=dd4d3adf452823702f3376d1869b07e39f03bff2;p=dead%2Fhtsn-import.git diff --git a/src/TSN/Picklers.hs b/src/TSN/Picklers.hs index 5c31198..1193abf 100644 --- a/src/TSN/Picklers.hs +++ b/src/TSN/Picklers.hs @@ -2,29 +2,21 @@ -- feed. -- module TSN.Picklers ( - xp_date ) + xp_date, + xp_team_id ) where +-- System imports. import Data.Time.Clock ( UTCTime ) import Data.Time.Format ( formatTime, parseTime ) import System.Locale ( defaultTimeLocale ) +import Text.Printf ( printf ) import Text.Read ( readMaybe ) import Text.XML.HXT.Arrow.Pickle ( - XmlPickler(..), xpText, xpWrapMaybe ) import Text.XML.HXT.Arrow.Pickle.Xml ( PU ) -instance XmlPickler Bool where - xpickle = - (to_bool, from_bool) `xpWrapMaybe` xpText - where - to_bool :: String -> Maybe Bool - to_bool = readMaybe - - from_bool :: Bool -> String - from_bool = show - -- | (Un)pickle a UTCTime without the time portion. -- @@ -39,3 +31,23 @@ xp_date = from_date :: UTCTime -> String from_date = formatTime defaultTimeLocale format + + +-- | Parse a team_id. This /should/ just be an 'Int', but TSN is doing +-- something weird. First of all, player IDs do look like normal +-- 'Int's. But the team IDs are all stuck in the triple digits, and +-- double-digit team IDs appear to be padded to three characters +-- with a leading '0'. So maybe they're treating these as text? +-- +-- In any case, we do the simplest thing that is correct for all the +-- XML we've got: pad it to (only) three digits on pickling. +-- +xp_team_id :: PU Int +xp_team_id = + (to_team_id, from_team_id) `xpWrapMaybe` xpText + where + to_team_id :: String -> Maybe Int + to_team_id = readMaybe + + from_team_id :: Int -> String + from_team_id = printf "%03d"