{-# LANGUAGE DerivingVia #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE UndecidableSuperClasses #-} module Cardano.Ledger.Genesis ( EraGenesis (..), NoGenesis (..), ) where import Cardano.Ledger.BaseTypes (KeyValuePairs (..), ToKeyValuePairs (..)) import Cardano.Ledger.Binary ( DecCBOR (..), EncCBOR (..), FromCBOR (..), ToCBOR (..), ) import Cardano.Ledger.Core.Era (Era) import Control.Monad (unless) import Data.Aeson ( FromJSON (..), ToJSON, Value (..), ) import qualified Data.Aeson.KeyMap as KV import Data.Kind (Type) class Era era => EraGenesis era where type Genesis era :: Type type Genesis era = NoGenesis era data NoGenesis era = NoGenesis deriving (NoGenesis era -> NoGenesis era -> Bool (NoGenesis era -> NoGenesis era -> Bool) -> (NoGenesis era -> NoGenesis era -> Bool) -> Eq (NoGenesis era) forall era. NoGenesis era -> NoGenesis era -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: forall era. NoGenesis era -> NoGenesis era -> Bool == :: NoGenesis era -> NoGenesis era -> Bool $c/= :: forall era. NoGenesis era -> NoGenesis era -> Bool /= :: NoGenesis era -> NoGenesis era -> Bool Eq, Int -> NoGenesis era -> ShowS [NoGenesis era] -> ShowS NoGenesis era -> String (Int -> NoGenesis era -> ShowS) -> (NoGenesis era -> String) -> ([NoGenesis era] -> ShowS) -> Show (NoGenesis era) forall era. Int -> NoGenesis era -> ShowS forall era. [NoGenesis era] -> ShowS forall era. NoGenesis era -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: forall era. Int -> NoGenesis era -> ShowS showsPrec :: Int -> NoGenesis era -> ShowS $cshow :: forall era. NoGenesis era -> String show :: NoGenesis era -> String $cshowList :: forall era. [NoGenesis era] -> ShowS showList :: [NoGenesis era] -> ShowS Show) deriving ([NoGenesis era] -> Value [NoGenesis era] -> Encoding NoGenesis era -> Bool NoGenesis era -> Value NoGenesis era -> Encoding (NoGenesis era -> Value) -> (NoGenesis era -> Encoding) -> ([NoGenesis era] -> Value) -> ([NoGenesis era] -> Encoding) -> (NoGenesis era -> Bool) -> ToJSON (NoGenesis era) forall era. [NoGenesis era] -> Value forall era. [NoGenesis era] -> Encoding forall era. NoGenesis era -> Bool forall era. NoGenesis era -> Value forall era. NoGenesis era -> Encoding forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> (a -> Bool) -> ToJSON a $ctoJSON :: forall era. NoGenesis era -> Value toJSON :: NoGenesis era -> Value $ctoEncoding :: forall era. NoGenesis era -> Encoding toEncoding :: NoGenesis era -> Encoding $ctoJSONList :: forall era. [NoGenesis era] -> Value toJSONList :: [NoGenesis era] -> Value $ctoEncodingList :: forall era. [NoGenesis era] -> Encoding toEncodingList :: [NoGenesis era] -> Encoding $comitField :: forall era. NoGenesis era -> Bool omitField :: NoGenesis era -> Bool ToJSON) via KeyValuePairs (NoGenesis era) instance Era era => ToCBOR (NoGenesis era) where toCBOR :: NoGenesis era -> Encoding toCBOR NoGenesis era _ = () -> Encoding forall a. ToCBOR a => a -> Encoding toCBOR () instance Era era => FromCBOR (NoGenesis era) where fromCBOR :: forall s. Decoder s (NoGenesis era) fromCBOR = NoGenesis era forall era. NoGenesis era NoGenesis NoGenesis era -> Decoder s () -> Decoder s (NoGenesis era) forall a b. a -> Decoder s b -> Decoder s a forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ forall a s. FromCBOR a => Decoder s a fromCBOR @() instance Era era => EncCBOR (NoGenesis era) instance Era era => DecCBOR (NoGenesis era) instance ToKeyValuePairs (NoGenesis era) where toKeyValuePairs :: forall e kv. KeyValue e kv => NoGenesis era -> [kv] toKeyValuePairs NoGenesis era _ = [] instance FromJSON (NoGenesis era) where parseJSON :: Value -> Parser (NoGenesis era) parseJSON = \case Value Null -> NoGenesis era -> Parser (NoGenesis era) forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure NoGenesis era forall era. NoGenesis era NoGenesis Object Object o -> do Bool -> Parser () -> Parser () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (Object -> Bool forall v. KeyMap v -> Bool KV.null Object o) (Parser () -> Parser ()) -> Parser () -> Parser () forall a b. (a -> b) -> a -> b $ String -> Parser () forall a. String -> Parser a forall (m :: * -> *) a. MonadFail m => String -> m a fail String "NoGenesis cannot have any fields" NoGenesis era -> Parser (NoGenesis era) forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure NoGenesis era forall era. NoGenesis era NoGenesis Value _ -> String -> Parser (NoGenesis era) forall a. String -> Parser a forall (m :: * -> *) a. MonadFail m => String -> m a fail String "Unexpected value type for NoGenesis"