module Hix.Managed.Data.ProjectStateProto where import Data.Aeson (FromJSON (parseJSON), withObject, (.:?)) import Distribution.Pretty (Pretty (pretty)) import Text.PrettyPrint (hang, ($+$)) import Hix.Class.EncodeNix (EncodeNix) import Hix.Data.Bounds (Bounds) import Hix.Data.Json (foldMissing) import Hix.Data.Overrides (Overrides) import Hix.Data.Version (Versions) import Hix.Managed.Data.Envs (Envs) import Hix.Managed.Data.Packages (Packages) data ProjectStateProto = ProjectStateProto { ProjectStateProto -> Packages Bounds bounds :: Packages Bounds, ProjectStateProto -> Envs Versions versions :: Envs Versions, ProjectStateProto -> Envs Overrides overrides :: Envs Overrides, ProjectStateProto -> Envs Versions initial :: Envs Versions, ProjectStateProto -> Bool resolving :: Bool } deriving stock (ProjectStateProto -> ProjectStateProto -> Bool (ProjectStateProto -> ProjectStateProto -> Bool) -> (ProjectStateProto -> ProjectStateProto -> Bool) -> Eq ProjectStateProto forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ProjectStateProto -> ProjectStateProto -> Bool == :: ProjectStateProto -> ProjectStateProto -> Bool $c/= :: ProjectStateProto -> ProjectStateProto -> Bool /= :: ProjectStateProto -> ProjectStateProto -> Bool Eq, Int -> ProjectStateProto -> ShowS [ProjectStateProto] -> ShowS ProjectStateProto -> String (Int -> ProjectStateProto -> ShowS) -> (ProjectStateProto -> String) -> ([ProjectStateProto] -> ShowS) -> Show ProjectStateProto forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ProjectStateProto -> ShowS showsPrec :: Int -> ProjectStateProto -> ShowS $cshow :: ProjectStateProto -> String show :: ProjectStateProto -> String $cshowList :: [ProjectStateProto] -> ShowS showList :: [ProjectStateProto] -> ShowS Show, (forall x. ProjectStateProto -> Rep ProjectStateProto x) -> (forall x. Rep ProjectStateProto x -> ProjectStateProto) -> Generic ProjectStateProto forall x. Rep ProjectStateProto x -> ProjectStateProto forall x. ProjectStateProto -> Rep ProjectStateProto x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. ProjectStateProto -> Rep ProjectStateProto x from :: forall x. ProjectStateProto -> Rep ProjectStateProto x $cto :: forall x. Rep ProjectStateProto x -> ProjectStateProto to :: forall x. Rep ProjectStateProto x -> ProjectStateProto Generic) deriving anyclass (ProjectStateProto -> Expr (ProjectStateProto -> Expr) -> EncodeNix ProjectStateProto forall a. (a -> Expr) -> EncodeNix a $cencodeNix :: ProjectStateProto -> Expr encodeNix :: ProjectStateProto -> Expr EncodeNix) instance Pretty ProjectStateProto where pretty :: ProjectStateProto -> Doc pretty ProjectStateProto {Bool Packages Bounds Envs Versions Envs Overrides $sel:bounds:ProjectStateProto :: ProjectStateProto -> Packages Bounds $sel:versions:ProjectStateProto :: ProjectStateProto -> Envs Versions $sel:overrides:ProjectStateProto :: ProjectStateProto -> Envs Overrides $sel:initial:ProjectStateProto :: ProjectStateProto -> Envs Versions $sel:resolving:ProjectStateProto :: ProjectStateProto -> Bool bounds :: Packages Bounds versions :: Envs Versions overrides :: Envs Overrides initial :: Envs Versions resolving :: Bool ..} = Doc -> Int -> Doc -> Doc hang Doc "bounds:" Int 2 (Packages Bounds -> Doc forall a. Pretty a => a -> Doc pretty Packages Bounds bounds) Doc -> Doc -> Doc $+$ Doc -> Int -> Doc -> Doc hang Doc "versions:" Int 2 (Envs Versions -> Doc forall a. Pretty a => a -> Doc pretty Envs Versions versions) Doc -> Doc -> Doc $+$ Doc -> Int -> Doc -> Doc hang Doc "overrides:" Int 2 (Envs Overrides -> Doc forall a. Pretty a => a -> Doc pretty Envs Overrides overrides) Doc -> Doc -> Doc $+$ Doc -> Int -> Doc -> Doc hang Doc "initial:" Int 2 (Envs Versions -> Doc forall a. Pretty a => a -> Doc pretty Envs Versions initial) instance FromJSON ProjectStateProto where parseJSON :: Value -> Parser ProjectStateProto parseJSON = String -> (Object -> Parser ProjectStateProto) -> Value -> Parser ProjectStateProto forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "ProjectStateProto" \ Object o -> do Packages Bounds bounds <- Object -> Key -> Parser (Packages Bounds) forall a. (Monoid a, FromJSON a) => Object -> Key -> Parser a foldMissing Object o Key "bounds" Envs Versions versions <- Object -> Key -> Parser (Envs Versions) forall a. (Monoid a, FromJSON a) => Object -> Key -> Parser a foldMissing Object o Key "versions" Envs Overrides overrides <- Object -> Key -> Parser (Envs Overrides) forall a. (Monoid a, FromJSON a) => Object -> Key -> Parser a foldMissing Object o Key "overrides" Envs Versions initial <- Object -> Key -> Parser (Envs Versions) forall a. (Monoid a, FromJSON a) => Object -> Key -> Parser a foldMissing Object o Key "initial" Bool resolving <- Bool -> Maybe Bool -> Bool forall a. a -> Maybe a -> a fromMaybe Bool False (Maybe Bool -> Bool) -> Parser (Maybe Bool) -> Parser Bool forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Object o Object -> Key -> Parser (Maybe Bool) forall a. FromJSON a => Object -> Key -> Parser (Maybe a) .:? Key "resolving" pure ProjectStateProto {Bool Packages Bounds Envs Versions Envs Overrides $sel:bounds:ProjectStateProto :: Packages Bounds $sel:versions:ProjectStateProto :: Envs Versions $sel:overrides:ProjectStateProto :: Envs Overrides $sel:initial:ProjectStateProto :: Envs Versions $sel:resolving:ProjectStateProto :: Bool bounds :: Packages Bounds versions :: Envs Versions overrides :: Envs Overrides initial :: Envs Versions resolving :: Bool ..} instance Default ProjectStateProto where def :: ProjectStateProto def = ProjectStateProto { $sel:bounds:ProjectStateProto :: Packages Bounds bounds = Packages Bounds forall a. Monoid a => a mempty, $sel:versions:ProjectStateProto :: Envs Versions versions = Envs Versions forall a. Monoid a => a mempty, $sel:overrides:ProjectStateProto :: Envs Overrides overrides = Envs Overrides forall a. Monoid a => a mempty, $sel:initial:ProjectStateProto :: Envs Versions initial = Envs Versions forall a. Monoid a => a mempty, $sel:resolving:ProjectStateProto :: Bool resolving = Bool False }