module CabalGild.Unstable.Type.VersionRange where

import qualified Distribution.Types.PkgconfigVersion as PkgconfigVersion
import qualified Distribution.Types.PkgconfigVersionRange as PkgconfigVersionRange
import qualified Distribution.Types.Version as Version
import qualified Distribution.Types.VersionRange as VersionRange

-- | This type exists to provide an 'Ord' instance for
-- 'VersionRange.VersionRange', which was added in @Cabal-syntax-3.10.1.0@.
data VersionRange a
  = Any
  | This a
  | Later a
  | Earlier a
  | Union (VersionRange a) (VersionRange a)
  | Intersect (VersionRange a) (VersionRange a)
  deriving (VersionRange a -> VersionRange a -> Bool
(VersionRange a -> VersionRange a -> Bool)
-> (VersionRange a -> VersionRange a -> Bool)
-> Eq (VersionRange a)
forall a. Eq a => VersionRange a -> VersionRange a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => VersionRange a -> VersionRange a -> Bool
== :: VersionRange a -> VersionRange a -> Bool
$c/= :: forall a. Eq a => VersionRange a -> VersionRange a -> Bool
/= :: VersionRange a -> VersionRange a -> Bool
Eq, Eq (VersionRange a)
Eq (VersionRange a) =>
(VersionRange a -> VersionRange a -> Ordering)
-> (VersionRange a -> VersionRange a -> Bool)
-> (VersionRange a -> VersionRange a -> Bool)
-> (VersionRange a -> VersionRange a -> Bool)
-> (VersionRange a -> VersionRange a -> Bool)
-> (VersionRange a -> VersionRange a -> VersionRange a)
-> (VersionRange a -> VersionRange a -> VersionRange a)
-> Ord (VersionRange a)
VersionRange a -> VersionRange a -> Bool
VersionRange a -> VersionRange a -> Ordering
VersionRange a -> VersionRange a -> VersionRange a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (VersionRange a)
forall a. Ord a => VersionRange a -> VersionRange a -> Bool
forall a. Ord a => VersionRange a -> VersionRange a -> Ordering
forall a.
Ord a =>
VersionRange a -> VersionRange a -> VersionRange a
$ccompare :: forall a. Ord a => VersionRange a -> VersionRange a -> Ordering
compare :: VersionRange a -> VersionRange a -> Ordering
$c< :: forall a. Ord a => VersionRange a -> VersionRange a -> Bool
< :: VersionRange a -> VersionRange a -> Bool
$c<= :: forall a. Ord a => VersionRange a -> VersionRange a -> Bool
<= :: VersionRange a -> VersionRange a -> Bool
$c> :: forall a. Ord a => VersionRange a -> VersionRange a -> Bool
> :: VersionRange a -> VersionRange a -> Bool
$c>= :: forall a. Ord a => VersionRange a -> VersionRange a -> Bool
>= :: VersionRange a -> VersionRange a -> Bool
$cmax :: forall a.
Ord a =>
VersionRange a -> VersionRange a -> VersionRange a
max :: VersionRange a -> VersionRange a -> VersionRange a
$cmin :: forall a.
Ord a =>
VersionRange a -> VersionRange a -> VersionRange a
min :: VersionRange a -> VersionRange a -> VersionRange a
Ord, Int -> VersionRange a -> ShowS
[VersionRange a] -> ShowS
VersionRange a -> String
(Int -> VersionRange a -> ShowS)
-> (VersionRange a -> String)
-> ([VersionRange a] -> ShowS)
-> Show (VersionRange a)
forall a. Show a => Int -> VersionRange a -> ShowS
forall a. Show a => [VersionRange a] -> ShowS
forall a. Show a => VersionRange a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> VersionRange a -> ShowS
showsPrec :: Int -> VersionRange a -> ShowS
$cshow :: forall a. Show a => VersionRange a -> String
show :: VersionRange a -> String
$cshowList :: forall a. Show a => [VersionRange a] -> ShowS
showList :: [VersionRange a] -> ShowS
Show)

fromPkgconfigVersionRange ::
  PkgconfigVersionRange.PkgconfigVersionRange ->
  VersionRange PkgconfigVersion.PkgconfigVersion
fromPkgconfigVersionRange :: PkgconfigVersionRange -> VersionRange PkgconfigVersion
fromPkgconfigVersionRange PkgconfigVersionRange
x = case PkgconfigVersionRange
x of
  PkgconfigVersionRange
PkgconfigVersionRange.PcAnyVersion -> VersionRange PkgconfigVersion
forall a. VersionRange a
Any
  PkgconfigVersionRange.PcThisVersion PkgconfigVersion
v -> PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. a -> VersionRange a
This PkgconfigVersion
v
  PkgconfigVersionRange.PcLaterVersion PkgconfigVersion
v -> PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. a -> VersionRange a
Later PkgconfigVersion
v
  PkgconfigVersionRange.PcEarlierVersion PkgconfigVersion
v -> PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. a -> VersionRange a
Earlier PkgconfigVersion
v
  PkgconfigVersionRange.PcOrLaterVersion PkgconfigVersion
v -> VersionRange PkgconfigVersion
-> VersionRange PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. VersionRange a -> VersionRange a -> VersionRange a
Union (PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. a -> VersionRange a
Later PkgconfigVersion
v) (PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. a -> VersionRange a
This PkgconfigVersion
v)
  PkgconfigVersionRange.PcOrEarlierVersion PkgconfigVersion
v -> VersionRange PkgconfigVersion
-> VersionRange PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. VersionRange a -> VersionRange a -> VersionRange a
Union (PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. a -> VersionRange a
Earlier PkgconfigVersion
v) (PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. a -> VersionRange a
This PkgconfigVersion
v)
  PkgconfigVersionRange.PcUnionVersionRanges PkgconfigVersionRange
v PkgconfigVersionRange
w -> VersionRange PkgconfigVersion
-> VersionRange PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. VersionRange a -> VersionRange a -> VersionRange a
Union (PkgconfigVersionRange -> VersionRange PkgconfigVersion
fromPkgconfigVersionRange PkgconfigVersionRange
v) (PkgconfigVersionRange -> VersionRange PkgconfigVersion
fromPkgconfigVersionRange PkgconfigVersionRange
w)
  PkgconfigVersionRange.PcIntersectVersionRanges PkgconfigVersionRange
v PkgconfigVersionRange
w -> VersionRange PkgconfigVersion
-> VersionRange PkgconfigVersion -> VersionRange PkgconfigVersion
forall a. VersionRange a -> VersionRange a -> VersionRange a
Intersect (PkgconfigVersionRange -> VersionRange PkgconfigVersion
fromPkgconfigVersionRange PkgconfigVersionRange
v) (PkgconfigVersionRange -> VersionRange PkgconfigVersion
fromPkgconfigVersionRange PkgconfigVersionRange
w)

fromVersionRange :: VersionRange.VersionRange -> VersionRange Version.Version
fromVersionRange :: VersionRange -> VersionRange Version
fromVersionRange =
  VersionRange Version
-> (Version -> VersionRange Version)
-> (Version -> VersionRange Version)
-> (Version -> VersionRange Version)
-> (VersionRange Version
    -> VersionRange Version -> VersionRange Version)
-> (VersionRange Version
    -> VersionRange Version -> VersionRange Version)
-> VersionRange
-> VersionRange Version
forall a.
a
-> (Version -> a)
-> (Version -> a)
-> (Version -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> VersionRange
-> a
VersionRange.foldVersionRange
    VersionRange Version
forall a. VersionRange a
Any
    Version -> VersionRange Version
forall a. a -> VersionRange a
This
    Version -> VersionRange Version
forall a. a -> VersionRange a
Later
    Version -> VersionRange Version
forall a. a -> VersionRange a
Earlier
    VersionRange Version
-> VersionRange Version -> VersionRange Version
forall a. VersionRange a -> VersionRange a -> VersionRange a
Union
    VersionRange Version
-> VersionRange Version -> VersionRange Version
forall a. VersionRange a -> VersionRange a -> VersionRange a
Intersect