{-# OPTIONS_GHC -Wno-orphans #-}

module Hydra.Cardano.Api.NetworkMagic where

import Cardano.Api (NetworkMagic (..))
import Data.Aeson (FromJSON (..), ToJSON (..))
import Test.QuickCheck (Arbitrary (..))

-- * Orphans

instance ToJSON NetworkMagic where
  toJSON :: NetworkMagic -> Value
toJSON (NetworkMagic Word32
magic) = Word32 -> Value
forall a. ToJSON a => a -> Value
toJSON Word32
magic

instance FromJSON NetworkMagic where
  parseJSON :: Value -> Parser NetworkMagic
parseJSON = (Word32 -> NetworkMagic) -> Parser Word32 -> Parser NetworkMagic
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Word32 -> NetworkMagic
NetworkMagic (Parser Word32 -> Parser NetworkMagic)
-> (Value -> Parser Word32) -> Value -> Parser NetworkMagic
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Parser Word32
forall a. FromJSON a => Value -> Parser a
parseJSON

instance Arbitrary NetworkMagic where
  arbitrary :: Gen NetworkMagic
arbitrary = Word32 -> NetworkMagic
NetworkMagic (Word32 -> NetworkMagic) -> Gen Word32 -> Gen NetworkMagic
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Word32
forall a. Arbitrary a => Gen a
arbitrary
  shrink :: NetworkMagic -> [NetworkMagic]
shrink (NetworkMagic Word32
x) = Word32 -> NetworkMagic
NetworkMagic (Word32 -> NetworkMagic) -> [Word32] -> [NetworkMagic]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Word32 -> [Word32]
forall a. Arbitrary a => a -> [a]
shrink Word32
x