-- | A bound-option is either a @Bound@, @Bounds@ or empty.
module Data.Geo.OSM.BoundOption
(
  BoundOption
, foldBoundOption
, optionBound
, optionBounds
, optionEmptyBound
) where

import Data.Geo.OSM.Bound
import Data.Geo.OSM.Bounds

data BoundOption =
  OptionBound Bound
  | OptionBounds Bounds
  | Empty
  deriving Eq

foldBoundOption ::
  (Bound -> x)
  -> (Bounds -> x)
  -> x
  -> BoundOption
  -> x
foldBoundOption f _ _ (OptionBound b) =
  f b
foldBoundOption _ f _ (OptionBounds b) =
  f b
foldBoundOption _ _ f Empty =
  f

optionBound ::
  Bound
  -> BoundOption
optionBound =
  OptionBound

optionBounds ::
  Bounds
  -> BoundOption
optionBounds =
  OptionBounds

optionEmptyBound ::
  BoundOption
optionEmptyBound =
  Empty