From: Michael Orlitzky Date: Mon, 30 Dec 2013 03:55:06 +0000 (-0500) Subject: Add a special pickler for the wacky team_ids. X-Git-Tag: 0.0.1~148 X-Git-Url: http://gitweb.michael.orlitzky.com/?p=dead%2Fhtsn-import.git;a=commitdiff_plain;h=ee387af8b24654089f13493637efc45bd48a8e41 Add a special pickler for the wacky team_ids. --- diff --git a/src/TSN/Picklers.hs b/src/TSN/Picklers.hs index 5c31198..c430b8d 100644 --- a/src/TSN/Picklers.hs +++ b/src/TSN/Picklers.hs @@ -2,12 +2,14 @@ -- feed. -- module TSN.Picklers ( - xp_date ) + xp_date, + xp_team_id ) where 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(..), @@ -39,3 +41,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"