{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances #-} -- | The @api@ element of a OSM file. module Data.Geo.OSM.Api ( Api , api ) where import Text.XML.HXT.Arrow.Pickle import Data.Geo.OSM.Version import Data.Geo.OSM.Area import Data.Geo.OSM.Tracepoints import Data.Geo.OSM.Waynodes import Data.Lens.Common import Control.Comonad.Trans.Store import Data.Geo.OSM.Lens.VersionL import Data.Geo.OSM.Lens.AreaL import Data.Geo.OSM.Lens.TracepointsL import Data.Geo.OSM.Lens.WaynodesL -- | The @api@ element of a OSM file. data Api = Api Version Area Tracepoints Waynodes deriving Eq -- | Constructs a @api@ with version, area, tracepoints and waynodes. api :: Version -- ^ The @version@ element. -> Area -- ^ The @area@ element. -> Tracepoints -- ^ The @tracepoints@ element. -> Waynodes -- ^ The @waynodes@ element. -> Api api = Api instance XmlPickler Api where xpickle = xpElem "api" (xpWrap (\(version', area', tracepoints', waypoints') -> api version' area' tracepoints' waypoints', \(Api version' area' tracepoints' waynodes') -> (version', area', tracepoints', waynodes')) (xp4Tuple (xpElem "version" xpickle) (xpElem "area" xpickle) (xpElem "tracepoints" xpickle) (xpElem "waynodes" xpickle))) instance Show Api where show = showPickled [] instance VersionL Api Version where versionL = Lens $ \(Api version area tracepoints waynodes) -> store (\version -> Api version area tracepoints waynodes) version instance AreaL Api where areaL = Lens $ \(Api version area tracepoints waynodes) -> store (\area -> Api version area tracepoints waynodes) area instance TracepointsL Api where tracepointsL = Lens $ \(Api version area tracepoints waynodes) -> store (\tracepoints -> Api version area tracepoints waynodes) tracepoints instance WaynodesL Api where waynodesL = Lens $ \(Api version area tracepoints waynodes) -> store (\waynodes -> Api version area tracepoints waynodes) waynodes