-- due to recent generic-arbitrary
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fconstraint-solver-iterations=0 #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module System.Nix.Arbitrary.StorePath.Metadata where

import Data.Dependent.Sum (DSum((:=>)))
import Data.HashSet.Arbitrary ()
import System.Nix.Arbitrary.ContentAddress ()
import System.Nix.Arbitrary.Hash ()
import System.Nix.Arbitrary.Signature ()
import System.Nix.Arbitrary.StorePath ()
import System.Nix.Arbitrary.UTCTime ()
import System.Nix.StorePath (StorePath)
import System.Nix.StorePath.Metadata (Metadata(..), StorePathTrust)

import qualified System.Nix.Hash

import Test.QuickCheck (Arbitrary(..), suchThat)
import Test.QuickCheck.Arbitrary.Generic (GenericArbitrary(..))

deriving via GenericArbitrary StorePathTrust
  instance Arbitrary StorePathTrust

instance Arbitrary (Metadata StorePath) where
  arbitrary :: Gen (Metadata StorePath)
arbitrary = do
    Maybe StorePath
metadataDeriverPath <- Gen (Maybe StorePath)
forall a. Arbitrary a => Gen a
arbitrary
    DSum HashAlgo Digest
metadataNarHash <- (HashAlgo SHA256
System.Nix.Hash.HashAlgo_SHA256 HashAlgo SHA256 -> Digest SHA256 -> DSum HashAlgo Digest
forall {k} (tag :: k -> *) (f :: k -> *) (a :: k).
tag a -> f a -> DSum tag f
:=>) (Digest SHA256 -> DSum HashAlgo Digest)
-> Gen (Digest SHA256) -> Gen (DSum HashAlgo Digest)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Digest SHA256)
forall a. Arbitrary a => Gen a
arbitrary
    HashSet StorePath
metadataReferences <- Gen (HashSet StorePath)
forall a. Arbitrary a => Gen a
arbitrary
    UTCTime
metadataRegistrationTime <- Gen UTCTime
forall a. Arbitrary a => Gen a
arbitrary
    Maybe Word64
metadataNarBytes <- Gen (Maybe Word64)
forall a. Arbitrary a => Gen a
arbitrary Gen (Maybe Word64) -> (Maybe Word64 -> Bool) -> Gen (Maybe Word64)
forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` (Maybe Word64 -> Maybe Word64 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word64 -> Maybe Word64
forall a. a -> Maybe a
Just Word64
0)
    StorePathTrust
metadataTrust <- Gen StorePathTrust
forall a. Arbitrary a => Gen a
arbitrary
    Set NarSignature
metadataSigs <- Gen (Set NarSignature)
forall a. Arbitrary a => Gen a
arbitrary
    Maybe ContentAddress
metadataContentAddress <- Gen (Maybe ContentAddress)
forall a. Arbitrary a => Gen a
arbitrary
    Metadata StorePath -> Gen (Metadata StorePath)
forall a. a -> Gen a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Metadata{Maybe Word64
Maybe ContentAddress
Maybe StorePath
Set NarSignature
DSum HashAlgo Digest
StorePathTrust
UTCTime
HashSet StorePath
metadataDeriverPath :: Maybe StorePath
metadataNarHash :: DSum HashAlgo Digest
metadataReferences :: HashSet StorePath
metadataRegistrationTime :: UTCTime
metadataNarBytes :: Maybe Word64
metadataTrust :: StorePathTrust
metadataSigs :: Set NarSignature
metadataContentAddress :: Maybe ContentAddress
metadataDeriverPath :: Maybe StorePath
metadataNarHash :: DSum HashAlgo Digest
metadataReferences :: HashSet StorePath
metadataRegistrationTime :: UTCTime
metadataNarBytes :: Maybe Word64
metadataTrust :: StorePathTrust
metadataSigs :: Set NarSignature
metadataContentAddress :: Maybe ContentAddress
..}