--
module TSN.Location (
Location(..),
+ pickle_location,
+ -- * WARNING: these are private but exported to silence warnings
LocationConstructor(..) )
where
-- System imports
+import Data.Tuple.Curry ( uncurryN )
import Database.Groundhog () -- Required for some String instance
import Database.Groundhog.TH (
defaultCodegenConfig,
groundhog,
mkPersist )
+import Text.XML.HXT.Core (
+ PU,
+ xpElem,
+ xpOption,
+ xpText,
+ xpTriple,
+ xpWrap )
-- | Database representation of a location.
type: constraint
fields: [city, state, country]
|]
+
+
+
+-- | We also provide an (un)pickler for one common XML representation,
+-- used at least in "TSN.XML.News" and "TSN.XML.Location".
+--
+pickle_location :: PU Location
+pickle_location =
+ xpElem "location" $
+ xpWrap (from_tuple, to_tuple) $
+ xpTriple (xpOption (xpElem "city" xpText))
+ (xpOption (xpElem "state" xpText))
+ (xpElem "country" xpText)
+ where
+ from_tuple = uncurryN Location
+ to_tuple l = (city l, state l, country l)
xpOption,
xpPair,
xpText,
- xpTriple,
xpWrap )
-- Local imports.
import TSN.Database ( insert_or_select )
import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
import TSN.Picklers ( xp_time_stamp )
-import TSN.Location ( Location(..) )
+import TSN.Location ( Location(..), pickle_location )
import TSN.XmlImport ( XmlImport(..) )
import Xml (
FromXml(..),
to_tuple m = (db_msg_id m, db_event_id m)
--- | Convert a 'Location' to/from XML.
---
-pickle_location :: PU Location
-pickle_location =
- xpElem "location" $
- xpWrap (from_tuple, to_tuple) $
- xpTriple (xpOption (xpElem "city" xpText))
- (xpOption (xpElem "state" xpText))
- (xpElem "country" xpText)
- where
- from_tuple =
- uncurryN Location
- to_tuple l = (city l, state l, country l)
-
-- | Convert a 'Message' to/from XML.
--