{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MonoLocalBinds #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Ledger.Tx.Orphans where import Data.Aeson (FromJSON (parseJSON), KeyValue ((.=)), ToJSON (toJSON), Value (Object), object, (.:)) import Data.Aeson.Types (parseFail, prependFailure, typeMismatch) import Cardano.Api qualified as C import Ledger.Address.Orphans () import Ledger.Builtins.Orphans () import Ledger.Credential.Orphans () import Ledger.Scripts.Orphans () import Ledger.Tx.Orphans.V1 () import Ledger.Tx.Orphans.V2 () import Ledger.Value.Orphans () instance ToJSON (C.Tx C.BabbageEra) where toJSON :: Tx BabbageEra -> Value toJSON Tx BabbageEra tx = [Pair] -> Value object [ Key "tx" Key -> TextEnvelope -> Pair forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv .= Maybe TextEnvelopeDescr -> Tx BabbageEra -> TextEnvelope forall a. HasTextEnvelope a => Maybe TextEnvelopeDescr -> a -> TextEnvelope C.serialiseToTextEnvelope Maybe TextEnvelopeDescr forall a. Maybe a Nothing Tx BabbageEra tx ] instance FromJSON (C.Tx C.BabbageEra) where parseJSON :: Value -> Parser (Tx BabbageEra) parseJSON (Object Object v) = do TextEnvelope envelope <- Object v Object -> Key -> Parser TextEnvelope forall a. FromJSON a => Object -> Key -> Parser a .: Key "tx" (TextEnvelopeError -> Parser (Tx BabbageEra)) -> (Tx BabbageEra -> Parser (Tx BabbageEra)) -> Either TextEnvelopeError (Tx BabbageEra) -> Parser (Tx BabbageEra) forall a c b. (a -> c) -> (b -> c) -> Either a b -> c either (Parser (Tx BabbageEra) -> TextEnvelopeError -> Parser (Tx BabbageEra) forall a b. a -> b -> a const (Parser (Tx BabbageEra) -> TextEnvelopeError -> Parser (Tx BabbageEra)) -> Parser (Tx BabbageEra) -> TextEnvelopeError -> Parser (Tx BabbageEra) forall a b. (a -> b) -> a -> b $ String -> Parser (Tx BabbageEra) forall a. String -> Parser a parseFail String "Failed to parse BabbageEra 'tx' field from SomeCardanoApiTx") Tx BabbageEra -> Parser (Tx BabbageEra) forall (f :: * -> *) a. Applicative f => a -> f a pure (Either TextEnvelopeError (Tx BabbageEra) -> Parser (Tx BabbageEra)) -> Either TextEnvelopeError (Tx BabbageEra) -> Parser (Tx BabbageEra) forall a b. (a -> b) -> a -> b $ AsType (Tx BabbageEra) -> TextEnvelope -> Either TextEnvelopeError (Tx BabbageEra) forall a. HasTextEnvelope a => AsType a -> TextEnvelope -> Either TextEnvelopeError a C.deserialiseFromTextEnvelope (AsType BabbageEra -> AsType (Tx BabbageEra) forall era. AsType era -> AsType (Tx era) C.AsTx AsType BabbageEra C.AsBabbageEra) TextEnvelope envelope parseJSON Value invalid = String -> Parser (Tx BabbageEra) -> Parser (Tx BabbageEra) forall a. String -> Parser a -> Parser a prependFailure String "parsing SomeCardanoApiTx failed, " (String -> Value -> Parser (Tx BabbageEra) forall a. String -> Value -> Parser a typeMismatch String "Object" Value invalid)