module Data.Geo.GPX.GpxType(
GpxType,
gpxType
) where
import Data.Geo.GPX.MetadataType
import Data.Geo.GPX.WptType
import Data.Geo.GPX.RteType
import Data.Geo.GPX.TrkType
import Data.Geo.GPX.ExtensionsType
import Data.Geo.GPX.PersonType
import Data.Geo.GPX.Accessor.Version
import Data.Geo.GPX.Accessor.Creator
import Data.Geo.GPX.Accessor.Metadata
import Data.Geo.GPX.Accessor.Wpts
import Data.Geo.GPX.Accessor.Rtes
import Data.Geo.GPX.Accessor.Trks
import Data.Geo.GPX.Accessor.Extensions
import Data.Geo.GPX.Accessor.Name
import Data.Geo.GPX.Accessor.Desc
import Data.Geo.GPX.Accessor.Author
import Data.Geo.GPX.Accessor.Copyright
import Data.Geo.GPX.Accessor.Links
import Data.Geo.GPX.Accessor.Time
import Data.Geo.GPX.Accessor.Keywords
import Data.Geo.GPX.Accessor.Bounds
import Data.Geo.GPX.Accessor.Rtepts
import Data.Geo.GPX.Accessor.Trkpts
import Text.XML.HXT.Arrow
import Text.XML.HXT.Extras
import Data.Maybe
data GpxType = GpxType String String (Maybe MetadataType) [WptType] [RteType] [TrkType] (Maybe ExtensionsType)
deriving (Eq, Show)
gpxType :: String
-> String
-> Maybe MetadataType
-> [WptType]
-> [RteType]
-> [TrkType]
-> Maybe ExtensionsType
-> GpxType
gpxType = GpxType
instance XmlPickler GpxType where
xpickle = xpWrap (\(version', creator', metadata', wpt', rte', trk', extensions') -> gpxType version' creator' metadata' wpt' rte' trk' extensions',
\(GpxType version' creator' metadata' wpt' rte' trk' extensions') -> (version', creator', metadata', wpt', rte', trk', extensions')) (xp7Tuple
(xpAttr "version" xpText)
(xpAttr "creator" xpText)
(xpOption (xpElem "metadata" xpickle))
(xpList (xpElem "wpt" xpickle))
(xpList (xpElem "rte" xpickle))
(xpList (xpElem "trk" xpickle))
(xpOption (xpElem "extensions" xpickle)))
instance Version GpxType where
version (GpxType x _ _ _ _ _ _) = x
setVersion a (GpxType _ b c d e f g) = gpxType a b c d e f g
instance Creator GpxType where
creator (GpxType _ x _ _ _ _ _) = x
setCreator b (GpxType a _ c d e f g) = gpxType a b c d e f g
instance Metadata GpxType where
metadata (GpxType _ _ x _ _ _ _) = x
setMetadata c (GpxType a b _ d e f g) = gpxType a b c d e f g
instance Wpts GpxType where
wpts (GpxType _ _ _ x _ _ _) = x
setWpts d (GpxType a b c _ e f g) = gpxType a b c d e f g
instance Rtes GpxType where
rtes (GpxType _ _ _ _ x _ _) = x
setRtes e (GpxType a b c d _ f g) = gpxType a b c d e f g
instance Trks GpxType where
trks (GpxType _ _ _ _ _ x _) = x
setTrks f (GpxType a b c d e _ g) = gpxType a b c d e f g
instance Extensions GpxType where
extensions (GpxType _ _ _ _ _ _ x) = x
setExtensions g (GpxType a b c d e f _) = gpxType a b c d e f g
instance Name GpxType where
name = (name =<<) . metadata
setName x (GpxType a b c d e f g) = gpxType a b (fmap (setName x) c) d e f g
instance Desc GpxType where
desc = (desc =<<) . metadata
setDesc x (GpxType a b c d e f g) = gpxType a b (fmap (setDesc x) c) d e f g
instance Author GpxType (Maybe PersonType) where
author = (author =<<) . metadata
setAuthor x (GpxType a b c d e f g) = gpxType a b (fmap (setAuthor x) c) d e f g
instance Copyright GpxType where
copyright = (copyright =<<) . metadata
setCopyright x (GpxType a b c d e f g) = gpxType a b (fmap (setCopyright x) c) d e f g
instance Links GpxType where
links = (links =<<) . maybeToList . metadata
setLinks x (GpxType a b c d e f g) = gpxType a b (fmap (setLinks x) c) d e f g
instance Time GpxType where
time = (time =<<) . metadata
setTime x (GpxType a b c d e f g) = gpxType a b (fmap (setTime x) c) d e f g
instance Keywords GpxType where
keywords = (keywords =<<) . metadata
setKeywords x (GpxType a b c d e f g) = gpxType a b (fmap (setKeywords x) c) d e f g
instance Bounds GpxType where
bounds = (bounds =<<) . metadata
setBounds x (GpxType a b c d e f g) = gpxType a b (fmap (setBounds x) c) d e f g
instance Rtepts GpxType where
rtepts = (rtepts =<<) . rtes
setRtepts x (GpxType a b c d e f g) = gpxType a b c d (fmap (setRtepts x) e) f g
instance Trkpts GpxType where
trkpts = (trkpts =<<) . trks
setTrkpts x (GpxType a b c d e f g) = gpxType a b c d e (fmap (setTrkpts x) f) g