-- | The @home@ element of a OSM file.
module Data.Geo.OSM.Home(
                          Home,
                          home
                        ) where

import Text.XML.HXT.Arrow
import Text.XML.HXT.Extras
import Data.Geo.OSM.Accessor.Lat
import Data.Geo.OSM.Accessor.Lon
import Data.Geo.OSM.Accessor.Zoom

-- | The @home@ element of a OSM file.
data Home = Home String String String
  deriving Eq

-- | Constructs a @home@ with lat, lon and zoom.
home :: String -- ^ The @lat@ attribute.
        -> String -- ^ The @lon@ attribute.
        -> String -- ^ The @zoom@ attribute.
        -> Home
home = Home

instance XmlPickler Home where
  xpickle = xpElem "home" (xpWrap (\(lat', lon', zoom') -> home lat' lon' zoom', \(Home lat' lon' zoom') -> (lat', lon', zoom')) (xpTriple (xpAttr "lat" xpText) (xpAttr "lon" xpText) (xpAttr "zoom" xpText)))

instance Show Home where
  show = showPickled []

instance Lat Home where
  lat (Home x _ _) = x
  setLat a (Home _ b c) = home a b c

instance Lon Home where
  lon (Home _ x _) = x
  setLon b (Home a _ c) = home a b c

instance Zoom Home where
  zoom (Home _ _ x) = x
  setZoom c (Home a b _) = home a b c