]> gitweb.michael.orlitzky.com - dead/htsn-import.git/blobdiff - src/TSN/Picklers.hs
Update (or add) a bunch of documentation.
[dead/htsn-import.git] / src / TSN / Picklers.hs
index 5c31198779c29ec377b44d30de99395b6f4a77a6..d87139b793bbb6dddc2e429a0c14b56fb96f3ccc 100644 (file)
@@ -2,29 +2,20 @@
 --   feed.
 --
 module TSN.Picklers (
-  xp_date )
+  xp_date,
+  xp_team_id,
+  xp_time )
 where
 
+-- System imports.
 import Data.Time.Clock ( UTCTime )
 import Data.Time.Format ( formatTime, parseTime )
 import System.Locale ( defaultTimeLocale )
-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 +30,37 @@ xp_date =
 
     from_date :: UTCTime -> String
     from_date = formatTime defaultTimeLocale format
+
+
+-- | (Un)pickle a UTCTime without the date portion.
+--
+xp_time :: PU UTCTime
+xp_time =
+  (to_time, from_time) `xpWrapMaybe` xpText
+  where
+    format = "%I:%M %p"
+
+    to_time :: String -> Maybe UTCTime
+    to_time = parseTime defaultTimeLocale format
+
+    from_time :: UTCTime -> String
+    from_time = formatTime defaultTimeLocale format
+
+
+
+-- | Parse a team_id. These are (so far!) three characters long, and
+--   not necessarily numeric. For simplicity, we return a 'String'
+--   rather than e.g. a @(Char, Char, Char)@. But unpickling will fail
+--   if the team_id is longer than three characters.
+--
+xp_team_id :: PU String
+xp_team_id =
+  (to_team_id, from_team_id) `xpWrapMaybe` xpText
+  where
+    to_team_id :: String -> Maybe String
+    to_team_id s
+      | length s <= 3 = Just s
+      | otherwise = Nothing
+
+    from_team_id :: String -> String
+    from_team_id = id