-- | The @version@ element of a OSM file.
module Data.Geo.OSM.VersionE(
                               VersionE,
                               versionE
                            ) where


import Text.XML.HXT.Arrow.Pickle
import Text.XML.HXT.Extras
import Data.Geo.OSM.Accessor.Minimum
import Data.Geo.OSM.Accessor.Maximum

-- | The @version@ element of a OSM file.
data VersionE = VersionE String String
  deriving Eq

-- | Constructs a @version@ with minimum and maximum.
versionE :: String -- ^ The @minimum@ attribute.
            -> String -- ^ The @maximum@ attribute.
            -> VersionE
versionE = VersionE

instance XmlPickler VersionE where
  xpickle = xpElem "version" (xpWrap (uncurry versionE, \(VersionE min' max') -> (min', max')) (xpPair (xpAttr "minimum" xpText) (xpAttr "maximum" xpText)))

instance Show VersionE where
  show = showPickled []

instance Minimum VersionE where
  minimum (VersionE x _) = x
  setMinimum a (VersionE _ b) = versionE a b

instance Maximum VersionE where
  maximum (VersionE _ x) = x
  setMaximum b (VersionE a _) = versionE a b