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


import Text.XML.HXT.Arrow.Pickle
import Data.Geo.OSM.Lens.MinimumL
import Data.Geo.OSM.Lens.MaximumL
import Data.Lens.Common
import Control.Comonad.Trans.Store

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

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

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

instance Show Version where
  show =
    showPickled []

instance MinimumL Version where
  minimumL =
    Lens $ \(Version minimum maximum) -> store (\minimum -> Version minimum maximum) minimum

instance MaximumL Version where
  maximumL =
    Lens $ \(Version minimum maximum) -> store (\maximum -> Version minimum maximum) maximum