module Hix.Managed.Data.Bump where

import Distribution.Pretty (Pretty (pretty))
import Text.PrettyPrint (brackets, parens, (<+>))

import Hix.Data.Version (Version)

data Bump =
  Bump {
    Bump -> Version
version :: Version,
    Bump -> Version
bound :: Version,
    Bump -> Bool
changed :: Bool
  }
  deriving stock (Bump -> Bump -> Bool
(Bump -> Bump -> Bool) -> (Bump -> Bump -> Bool) -> Eq Bump
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Bump -> Bump -> Bool
== :: Bump -> Bump -> Bool
$c/= :: Bump -> Bump -> Bool
/= :: Bump -> Bump -> Bool
Eq, Int -> Bump -> ShowS
[Bump] -> ShowS
Bump -> String
(Int -> Bump -> ShowS)
-> (Bump -> String) -> ([Bump] -> ShowS) -> Show Bump
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Bump -> ShowS
showsPrec :: Int -> Bump -> ShowS
$cshow :: Bump -> String
show :: Bump -> String
$cshowList :: [Bump] -> ShowS
showList :: [Bump] -> ShowS
Show, (forall x. Bump -> Rep Bump x)
-> (forall x. Rep Bump x -> Bump) -> Generic Bump
forall x. Rep Bump x -> Bump
forall x. Bump -> Rep Bump x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Bump -> Rep Bump x
from :: forall x. Bump -> Rep Bump x
$cto :: forall x. Rep Bump x -> Bump
to :: forall x. Rep Bump x -> Bump
Generic)

instance Pretty Bump where
  pretty :: Bump -> Doc
pretty Bump {Version
version :: Bump -> Version
version :: Version
version, Version
bound :: Bump -> Version
bound :: Version
bound, Bool
changed :: Bump -> Bool
changed :: Bool
changed} =
    Version -> Doc
forall a. Pretty a => a -> Doc
pretty Version
version Doc -> Doc -> Doc
<+> Doc -> Doc
parens (Doc
"<" Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Version -> Doc
forall a. Pretty a => a -> Doc
pretty Version
bound) Doc -> Doc -> Doc
<+> Doc -> Doc
brackets (if Bool
changed then Doc
"x" else Doc
" ")