--
module TSN.Picklers (
xp_date,
+ xp_date_padded,
xp_gamedate,
+ xp_racedate,
xp_tba_time,
xp_time,
xp_time_stamp )
time_stamp_format )
+-- | The format string for a base date in m/d/yyyy format. The
+-- day/month are not padded at all. This will match for example,
+--
+-- * 2/15/1983
+-- * 1/1/0000
+--
+date_format :: String
+date_format = "%-m/%-d/%Y"
+
+
+-- | The format string for a base date in mm/dd/yyyy format. The
+-- day/month are padded to two characters with zeros. This will
+-- match for example,
+--
+-- * 02/15/1983
+-- * 01/01/0000
+--
+date_format_padded :: String
+date_format_padded = "%0m/%0d/%Y"
+
+
-- | (Un)pickle a UTCTime without the time portion.
--
xp_date :: PU UTCTime
xp_date =
(to_date, from_date) `xpWrapMaybe` xpText
where
- format = "%-m/%-d/%Y"
+ to_date :: String -> Maybe UTCTime
+ to_date = parseTime defaultTimeLocale date_format
+
+ from_date :: UTCTime -> String
+ from_date = formatTime defaultTimeLocale date_format
+
+-- | (Un)pickle a UTCTime without the time portion. The day/month are
+-- padded to two characters with zeros.
+--
+xp_date_padded :: PU UTCTime
+xp_date_padded =
+ (to_date, from_date) `xpWrapMaybe` xpText
+ where
to_date :: String -> Maybe UTCTime
- to_date = parseTime defaultTimeLocale format
+ to_date = parseTime defaultTimeLocale date_format_padded
from_date :: UTCTime -> String
- from_date = formatTime defaultTimeLocale format
+ from_date = formatTime defaultTimeLocale date_format_padded
+
+
+-- | (Un)pickle a 'UTCTime' from a \<RaceDate\> element in an
+-- 'AutoRaceResults' message.
+--
+-- Example:
+--
+-- <RaceDate>6/1/2014 1:00:00 PM</RaceDate>
+-- <RaceDate>5/24/2014 2:45:00 PM</RaceDate>
+--
+xp_racedate :: PU UTCTime
+xp_racedate =
+ (to_racedate, from_racedate) `xpWrapMaybe` xpText
+ where
+ format = date_format ++ " " ++ "%-I:%M:%S %p"
+
+ to_racedate :: String -> Maybe UTCTime
+ to_racedate = parseTime defaultTimeLocale format
+
+ from_racedate :: UTCTime -> String
+ from_racedate = formatTime defaultTimeLocale format
-- | (Un)pickle a UTCTime from a weather forecast's gamedate. Example
import TSN.Codegen (
tsn_codegen_config )
import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
-import TSN.Picklers ( xp_date, xp_tba_time, xp_time_stamp )
+import TSN.Picklers ( xp_date_padded, xp_tba_time, xp_time_stamp )
import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) )
import Xml (
FromXml(..),
xpElem "Listing" $
xpWrap (from_tuple, to_tuple) $
xp10Tuple (xpElem "RaceID" xpInt)
- (xpElem "Race_Date" xp_date)
+ (xpElem "Race_Date" xp_date_padded)
(xpElem "Race_Time" xp_tba_time)
(xpElem "RaceName" xpText)
(xpElem "TrackName" xpText)
-- * News/Message
--- | The msg_id child of <message> contains an event_id attribute; we
--- embed it into the 'News' type. We (pointlessly) use the "db_"
--- prefix here so that the two names don't collide on "id" when
+-- | The msg_id child of \<message\> contains an event_id attribute; we
+-- embed it into the 'News' type. We (pointlessly) use the \"db_\"
+-- prefix here so that the two names don't collide on \"id\" when
-- Groundhog is creating its fields using our field namer.
--
data MsgId =
import TSN.Codegen (
tsn_codegen_config )
import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
-import TSN.Picklers ( xp_date, xp_time, xp_time_stamp )
+import TSN.Picklers ( xp_date_padded, xp_time, xp_time_stamp )
import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) )
import Xml (
FromXml(..),
xpWrap (from_tuple, to_tuple) $
xp6Tuple
(xpElem "GameID" xpInt)
- (xpElem "Game_Date" xp_date)
+ (xpElem "Game_Date" xp_date_padded)
(xpElem "Game_Time" xp_time)
pickle_away_team
pickle_home_team