]> gitweb.michael.orlitzky.com - dead/htsn-import.git/commitdiff
Add a special pickler for the wacky team_ids.
authorMichael Orlitzky <michael@orlitzky.com>
Mon, 30 Dec 2013 03:55:06 +0000 (22:55 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 30 Dec 2013 03:55:06 +0000 (22:55 -0500)
src/TSN/Picklers.hs

index 5c31198779c29ec377b44d30de99395b6f4a77a6..c430b8d84e0d5042805f1fcfd67024d642d29f93 100644 (file)
@@ -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"