module Data.Geo.GPX.Accessor.Metadata where

import Data.Geo.GPX.MetadataType
import Data.Geo.GPX.Accessor.Accessor

class Metadata a where
  metadata :: a -> Maybe MetadataType
  setMetadata :: Maybe MetadataType -> a -> a

  setMetadata' :: MetadataType -> a -> a
  setMetadata' = setMetadata . Just

  usingMetadata :: (Maybe MetadataType -> Maybe MetadataType) -> a -> a
  usingMetadata = metadata `using` setMetadata

  usingMetadata' :: (MetadataType -> MetadataType) -> a -> a
  usingMetadata' = usingMetadata . fmap