module CabalGild.Unstable.Type.PkgconfigDependency where

import qualified CabalGild.Unstable.Type.PkgconfigVersionRange as PkgconfigVersionRange
import qualified Data.Ord as Ord
import qualified Distribution.Parsec as Parsec
import qualified Distribution.Pretty as Pretty
import qualified Distribution.Types.PkgconfigDependency as PkgconfigDependency

-- | This type exists to provide an 'Ord' instance for
-- 'PkgconfigDependency.PkgconfigDependency', which was added in
-- @Cabal-syntax-3.10.1.0@.
newtype PkgconfigDependency = PkgconfigDependency
  { PkgconfigDependency -> PkgconfigDependency
unwrap :: PkgconfigDependency.PkgconfigDependency
  }
  deriving (PkgconfigDependency -> PkgconfigDependency -> Bool
(PkgconfigDependency -> PkgconfigDependency -> Bool)
-> (PkgconfigDependency -> PkgconfigDependency -> Bool)
-> Eq PkgconfigDependency
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PkgconfigDependency -> PkgconfigDependency -> Bool
== :: PkgconfigDependency -> PkgconfigDependency -> Bool
$c/= :: PkgconfigDependency -> PkgconfigDependency -> Bool
/= :: PkgconfigDependency -> PkgconfigDependency -> Bool
Eq, Int -> PkgconfigDependency -> ShowS
[PkgconfigDependency] -> ShowS
PkgconfigDependency -> String
(Int -> PkgconfigDependency -> ShowS)
-> (PkgconfigDependency -> String)
-> ([PkgconfigDependency] -> ShowS)
-> Show PkgconfigDependency
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PkgconfigDependency -> ShowS
showsPrec :: Int -> PkgconfigDependency -> ShowS
$cshow :: PkgconfigDependency -> String
show :: PkgconfigDependency -> String
$cshowList :: [PkgconfigDependency] -> ShowS
showList :: [PkgconfigDependency] -> ShowS
Show)

instance Ord PkgconfigDependency where
  compare :: PkgconfigDependency -> PkgconfigDependency -> Ordering
compare =
    (PkgconfigDependency -> (PkgconfigName, PkgconfigVersionRange))
-> PkgconfigDependency -> PkgconfigDependency -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
Ord.comparing ((PkgconfigDependency -> (PkgconfigName, PkgconfigVersionRange))
 -> PkgconfigDependency -> PkgconfigDependency -> Ordering)
-> (PkgconfigDependency -> (PkgconfigName, PkgconfigVersionRange))
-> PkgconfigDependency
-> PkgconfigDependency
-> Ordering
forall a b. (a -> b) -> a -> b
$
      (\(PkgconfigDependency.PkgconfigDependency PkgconfigName
pn PkgconfigVersionRange
pvr) -> (PkgconfigName
pn, PkgconfigVersionRange -> PkgconfigVersionRange
PkgconfigVersionRange.PkgconfigVersionRange PkgconfigVersionRange
pvr))
        (PkgconfigDependency -> (PkgconfigName, PkgconfigVersionRange))
-> (PkgconfigDependency -> PkgconfigDependency)
-> PkgconfigDependency
-> (PkgconfigName, PkgconfigVersionRange)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PkgconfigDependency -> PkgconfigDependency
unwrap

instance Parsec.Parsec PkgconfigDependency where
  parsec :: forall (m :: * -> *). CabalParsing m => m PkgconfigDependency
parsec = PkgconfigDependency -> PkgconfigDependency
PkgconfigDependency (PkgconfigDependency -> PkgconfigDependency)
-> m PkgconfigDependency -> m PkgconfigDependency
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m PkgconfigDependency
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
forall (m :: * -> *). CabalParsing m => m PkgconfigDependency
Parsec.parsec

instance Pretty.Pretty PkgconfigDependency where
  pretty :: PkgconfigDependency -> Doc
pretty = PkgconfigDependency -> Doc
forall a. Pretty a => a -> Doc
Pretty.pretty (PkgconfigDependency -> Doc)
-> (PkgconfigDependency -> PkgconfigDependency)
-> PkgconfigDependency
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PkgconfigDependency -> PkgconfigDependency
unwrap