--- | We put the 'Configuration' and 'XmlTree' arguments last so that
--- it's easy to eta reduce all of the import_foo functions that call
--- this.
---
-import_generic :: (XmlPickler a, PersistEntity b)
- => b -- ^ Dummy Listing instance needed for 'migrate'
- -> (a -> [b]) -- ^ listings getter
- -> Configuration
- -> XmlTree
- -> IO (Maybe Int) -- ^ Return the number of records inserted.
-import_generic dummy g cfg xml
- | backend cfg == Postgres = withPostgresqlConn cs go
- | otherwise = withSqliteConn cs go
- where
- -- | Pull the real connection String out of the configuration.
- cs :: String
- cs = get_connection_string $ connection_string cfg
-
- -- Needs NoMonomorphismRestriction to be allowed to return
- -- different types in the two cases above.
- go = runDbConn $ do
- runMigration defaultMigrationLogger $ migrate dummy
- let root_element = unpickleDoc xpickle xml
- case root_element of
- Nothing -> do
- let msg = "Could not unpickle document in import_generic."
- liftIO $ report_error msg
- return Nothing
- Just elt -> do
- ids <- mapM insert (g elt)
- return $ Just (length ids)
-
-
-
--- | Import TSN.Injuries from an 'XmlTree'.
-import_injuries :: Configuration -> XmlTree -> IO (Maybe Int)
-import_injuries =
- import_generic
- (undefined :: Injuries.Listing)
- Injuries.listings
-
--- | Import TSN.InjuriesDetail from an 'XmlTree'.
-import_injuries_detail :: Configuration -> XmlTree -> IO (Maybe Int)
-import_injuries_detail =
- import_generic
- (undefined :: InjuriesDetail.PlayerListing)
- ( (concatMap InjuriesDetail.player_listings) . InjuriesDetail.listings)