module Kubernetes.Model.V1.Any
( Any (..)
, any
) where
import Control.Lens.TH (makeLenses)
import Control.Monad (mzero, replicateM)
import Data.Aeson
import qualified Data.HashMap.Strict as HMap
import Data.Text (Text)
import Data.Vector (fromList)
import GHC.Generics
import Prelude hiding (any)
import Test.QuickCheck
import Test.QuickCheck.Instances ()
newtype Any =
Any { _any :: Object
} deriving (Show, Eq, Generic)
makeLenses ''Any
instance FromJSON Any where
parseJSON (Object o) = return . Any $ o
parseJSON _ = mzero
instance ToJSON Any where
toJSON (Any o) = Object o
arbValue :: Gen Value
arbValue =
let
aValue :: Int -> Gen Value
aValue 0 = oneof [ return Null
, Bool <$> arbitrary
, Number . fromInteger <$> arbitrary
, String <$> arbitrary
]
aValue n = do
(Positive m) <- arbitrary
let n' = quot n (m+1)
oneof [ return Null
, Bool <$> arbitrary
, Number . fromInteger <$> arbitrary
, String <$> arbitrary
, Array . fromList <$> replicateM m (aValue n')
]
in arbitrary >>= aValue
instance Arbitrary Any where
arbitrary = Any . HMap.fromList <$> do
keys <- listOf (arbitrary :: Gen Text)
mapM (\k -> (,) k <$> arbValue) keys