]> gitweb.michael.orlitzky.com - dead/htsn-import.git/blobdiff - src/TSN/Picklers.hs
Remove unused StandaloneDeriving pragmas.
[dead/htsn-import.git] / src / TSN / Picklers.hs
index f80b085efb1dd06507b0735cff9b2d5ba217bc6d..608f907e5b43896dc059e6aca8ea5be144b9fc46 100644 (file)
@@ -4,6 +4,7 @@
 module TSN.Picklers (
   xp_date,
   xp_gamedate,
+  xp_tba_time,
   xp_time,
   xp_time_stamp )
 where
@@ -14,9 +15,16 @@ import Data.Time.Format ( formatTime, parseTime )
 import System.Locale ( defaultTimeLocale )
 import Text.XML.HXT.Arrow.Pickle (
   xpText,
+  xpWrap,
   xpWrapMaybe )
 import Text.XML.HXT.Arrow.Pickle.Xml ( PU )
 
+-- Local imports.
+import TSN.Parse (
+  parse_time_stamp,
+  time_format,
+  time_stamp_format )
+
 
 -- | (Un)pickle a UTCTime without the time portion.
 --
@@ -81,10 +89,7 @@ xp_gamedate =
 
 
 
--- | The time format string used in 'xp_time' and 'xp_time_stamp'.
---
-xp_time_format :: String
-xp_time_format = "%I:%M %p"
+
 
 
 -- | (Un)pickle a UTCTime without the date portion.
@@ -94,10 +99,27 @@ xp_time =
   (to_time, from_time) `xpWrapMaybe` xpText
   where
     to_time :: String -> Maybe UTCTime
-    to_time = parseTime defaultTimeLocale xp_time_format
+    to_time = parseTime defaultTimeLocale time_format
 
     from_time :: UTCTime -> String
-    from_time = formatTime defaultTimeLocale xp_time_format
+    from_time = formatTime defaultTimeLocale time_format
+
+
+-- | (Un)pickle a UTCTime without the date portion, allowing for a
+--   value of \"TBA\" (which gets translated to 'Nothing').
+--
+xp_tba_time :: PU (Maybe UTCTime)
+xp_tba_time =
+  (to_time, from_time) `xpWrap` xpText
+  where
+    to_time :: String -> Maybe UTCTime
+    to_time s
+      | s == "TBA" = Nothing
+      | otherwise = parseTime defaultTimeLocale time_format s
+
+    from_time :: Maybe UTCTime -> String
+    from_time Nothing = ""
+    from_time (Just t) = formatTime defaultTimeLocale time_format t
 
 
 
@@ -111,22 +133,14 @@ xp_time =
 --
 xp_time_stamp :: PU UTCTime
 xp_time_stamp =
-  (to_time_stamp, from_time_stamp) `xpWrapMaybe` xpText
+  (parse_time_stamp, from_time_stamp) `xpWrapMaybe` xpText
   where
-    -- This omits the timezone and trailing space.
-    format = " %B %-d, %Y, at " ++ xp_time_format ++ " ET "
-
     five_hours :: NominalDiffTime
     five_hours = 5 * 60 * 60
 
-    add_five :: UTCTime -> UTCTime
-    add_five = addUTCTime five_hours
-
     subtract_five :: UTCTime -> UTCTime
     subtract_five = addUTCTime (-1 * five_hours)
 
-    to_time_stamp :: String -> Maybe UTCTime
-    to_time_stamp = fmap add_five . parseTime defaultTimeLocale format
-
     from_time_stamp :: UTCTime -> String
-    from_time_stamp = formatTime defaultTimeLocale format . subtract_five
+    from_time_stamp =
+      formatTime defaultTimeLocale time_stamp_format . subtract_five