From ee387af8b24654089f13493637efc45bd48a8e41 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sun, 29 Dec 2013 22:55:06 -0500 Subject: [PATCH] Add a special pickler for the wacky team_ids. --- src/TSN/Picklers.hs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) 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" -- 2.44.2