{-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} module Test.Cardano.Ledger.Api.DebugTools where import Cardano.Ledger.Binary (DecCBOR, EncCBOR, Version, decodeFull') import Cardano.Ledger.Binary.Encoding (serialize') import Cardano.Ledger.Core (Era, eraProtVerLow) import Control.Exception (throwIO) import Control.Monad.IO.Class (MonadIO (..)) import qualified Data.ByteString as BS readCBOR :: (DecCBOR a, MonadIO m) => Version -> FilePath -> m a readCBOR :: forall a (m :: * -> *). (DecCBOR a, MonadIO m) => Version -> FilePath -> m a readCBOR Version version FilePath path = forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO forall a b. (a -> b) -> a -> b $ do ByteString dat <- FilePath -> IO ByteString BS.readFile FilePath path case forall a. DecCBOR a => Version -> ByteString -> Either DecoderError a decodeFull' Version version ByteString dat of Right a x -> forall (f :: * -> *) a. Applicative f => a -> f a pure a x Left DecoderError err -> forall e a. Exception e => e -> IO a throwIO DecoderError err writeCBOR :: (EncCBOR a, MonadIO m) => Version -> FilePath -> a -> m () writeCBOR :: forall a (m :: * -> *). (EncCBOR a, MonadIO m) => Version -> FilePath -> a -> m () writeCBOR Version version FilePath path = forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c . FilePath -> ByteString -> IO () BS.writeFile FilePath path forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. EncCBOR a => Version -> a -> ByteString serialize' Version version readEraCBOR :: forall t era m. (Era era, DecCBOR (t era), MonadIO m) => FilePath -> m (t era) readEraCBOR :: forall (t :: * -> *) era (m :: * -> *). (Era era, DecCBOR (t era), MonadIO m) => FilePath -> m (t era) readEraCBOR = forall a (m :: * -> *). (DecCBOR a, MonadIO m) => Version -> FilePath -> m a readCBOR (forall era. Era era => Version eraProtVerLow @era) writeEraCBOR :: forall t era m. (Era era, EncCBOR (t era), MonadIO m) => FilePath -> t era -> m () writeEraCBOR :: forall (t :: * -> *) era (m :: * -> *). (Era era, EncCBOR (t era), MonadIO m) => FilePath -> t era -> m () writeEraCBOR = forall a (m :: * -> *). (EncCBOR a, MonadIO m) => Version -> FilePath -> a -> m () writeCBOR (forall era. Era era => Version eraProtVerLow @era)