import Control.Lens (makeClassy)
import Data.Aeson (ToJSON (toEncoding, toJSON), defaultOptions, genericToEncoding, object, (.=))
import Data.Aeson qualified as Aeson
+
import Data.ByteString (ByteString)
+
import Data.ByteString.Base16 qualified as Base16
+
import Data.Char qualified as Char
+
import Data.Text qualified as Text
+
import Data.Text.Encoding qualified as Text
import GHC.Generics (Generic)
import Network.Wai.Handler.Warp (Settings)
import Cardano.Api qualified as C
+
import Cardano.Api.Shelley qualified as Shelley
import Marconi.Index.Utxo qualified as Utxo
import Marconi.Types as Export (TargetAddresses)
-
instance ToJSON C.ScriptData where
-
toJSON = C.scriptDataToJson C.ScriptDataJsonDetailedSchema
+
= AddressNotInListError QueryExceptions
+
| AddressConversionError QueryExceptions
+
| TxRefConversionError QueryExceptions
+
deriving anyclass Exception
+
-- | JSON strings that are base16 encoded and prefixed with 'bytesPrefix' will
+
-- be encoded as CBOR bytestrings.
+
instance ToJSON ByteString where
+
| Right s <- Text.decodeUtf8' bs, Text.all Char.isPrint s = Aeson.String s
+
= Aeson.String (bytesPrefix <> Text.decodeLatin1 (Base16.encode bs))
instance ToJSON Utxo.Utxo where
toJSON (Utxo.Utxo addr tId tIx dtum dtumHash val scrpt scrptHash) = object
+
, "datum" .= (C.serialiseToCBOR <$> dtum)
, "datumHash" .= dtumHash
-
, "inlineScript" .= scrpt
+
, "inlineScript" .= (scriptToCBOR <$>scrpt)
, "inlineScriptHash" .= scrptHash
instance ToJSON UtxoReport where
toEncoding = genericToEncoding defaultOptions
-
newtype UtxoRowWrapper = UtxoRowWrapper Utxo.UtxoRow
-
deriving (Eq, Ord, Show, Generic)
-
instance ToJSON UtxoRowWrapper where
-
toEncoding = genericToEncoding defaultOptions
-
= AddressNotInListError QueryExceptions
-
| AddressConversionError QueryExceptions
-
| TxRefConversionError QueryExceptions
-
deriving anyclass Exception
instance ToJSON C.AddressAny where
toJSON = Aeson.String . C.serialiseAddress
-
-- instance ToJSON ByteString where toJSON = Data.Aeson.String . decodeUtf8
instance ToJSON (Utxo.StorableQuery Utxo.UtxoHandle) where
toJSON (Utxo.UtxoAddress addr) = toJSON addr
, "blockHeaderHash" .= h]
+
-- | convert to Script to CBOR bytestring
+
scriptToCBOR :: Shelley.ScriptInAnyLang -> ByteString
+
scriptToCBOR (Shelley.ScriptInAnyLang(C.SimpleScriptLanguage C.SimpleScriptV1) script) =
+
C.serialiseToCBOR script
+
scriptToCBOR (Shelley.ScriptInAnyLang(C.SimpleScriptLanguage C.SimpleScriptV2) script) =
+
C.serialiseToCBOR script
+
scriptToCBOR (Shelley.ScriptInAnyLang(C.PlutusScriptLanguage C.PlutusScriptV1) script) =
+
C.serialiseToCBOR script
+
scriptToCBOR (Shelley.ScriptInAnyLang(C.PlutusScriptLanguage C.PlutusScriptV2) script) =
+
C.serialiseToCBOR script