module Hix.Managed.Data.MutableId where import Data.Aeson (ToJSON (toJSON), object, (.=)) import Distribution.Pretty (Pretty (pretty)) import Distribution.Version (Version) import qualified Hix.Data.PackageId import Hix.Data.PackageId (PackageId (PackageId)) import Hix.Managed.Data.Mutable (MutableDep (MutableDep)) import Hix.Pretty (showP) data MutableId = MutableId { MutableId -> MutableDep name :: MutableDep, MutableId -> Version version :: Version } deriving stock (MutableId -> MutableId -> Bool (MutableId -> MutableId -> Bool) -> (MutableId -> MutableId -> Bool) -> Eq MutableId forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: MutableId -> MutableId -> Bool == :: MutableId -> MutableId -> Bool $c/= :: MutableId -> MutableId -> Bool /= :: MutableId -> MutableId -> Bool Eq, Int -> MutableId -> ShowS [MutableId] -> ShowS MutableId -> String (Int -> MutableId -> ShowS) -> (MutableId -> String) -> ([MutableId] -> ShowS) -> Show MutableId forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> MutableId -> ShowS showsPrec :: Int -> MutableId -> ShowS $cshow :: MutableId -> String show :: MutableId -> String $cshowList :: [MutableId] -> ShowS showList :: [MutableId] -> ShowS Show, (forall x. MutableId -> Rep MutableId x) -> (forall x. Rep MutableId x -> MutableId) -> Generic MutableId forall x. Rep MutableId x -> MutableId forall x. MutableId -> Rep MutableId x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. MutableId -> Rep MutableId x from :: forall x. MutableId -> Rep MutableId x $cto :: forall x. Rep MutableId x -> MutableId to :: forall x. Rep MutableId x -> MutableId Generic) toPackageId :: MutableId -> PackageId toPackageId :: MutableId -> PackageId toPackageId MutableId {name :: MutableId -> MutableDep name = MutableDep PackageName name, Version version :: MutableId -> Version version :: Version version} = PackageId {PackageName name :: PackageName name :: PackageName name, Version version :: Version version :: Version version} instance Pretty MutableId where pretty :: MutableId -> Doc pretty = PackageId -> Doc forall a. Pretty a => a -> Doc pretty (PackageId -> Doc) -> (MutableId -> PackageId) -> MutableId -> Doc forall b c a. (b -> c) -> (a -> b) -> a -> c . MutableId -> PackageId toPackageId instance ToJSON MutableId where toJSON :: MutableId -> Value toJSON MutableId {Version MutableDep name :: MutableId -> MutableDep version :: MutableId -> Version name :: MutableDep version :: Version ..} = [Pair] -> Value object [Key "name" Key -> Value -> Pair forall v. ToJSON v => Key -> v -> Pair forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv .= MutableDep -> Value forall a. ToJSON a => a -> Value toJSON MutableDep name, Key "version" Key -> Value -> Pair forall v. ToJSON v => Key -> v -> Pair forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv .= Text -> Value forall a. ToJSON a => a -> Value toJSON (Version -> Text forall b a. (Pretty a, IsString b) => a -> b showP Version version :: Text)]