{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Cardano.Network.Protocol.LocalTxMonitor.Codec
( codecLocalTxMonitor
, Codec.codecLocalTxMonitorId
) where
import Control.Monad.Class.MonadST
import Codec.CBOR.Decoding qualified as CBOR
import Codec.CBOR.Encoding qualified as CBOR
import Codec.CBOR.Read qualified as CBOR
import Data.ByteString.Lazy (ByteString)
import Network.TypedProtocol.Codec
import Cardano.Network.NodeToClient.Version
import Ouroboros.Network.Protocol.LocalTxMonitor.Codec qualified as Codec
import Ouroboros.Network.Protocol.LocalTxMonitor.Type
codecLocalTxMonitor ::
forall txid tx slot m.
MonadST m
=> NodeToClientVersion
-> (txid -> CBOR.Encoding)
-> (forall s. CBOR.Decoder s txid)
-> (tx -> CBOR.Encoding)
-> (forall s. CBOR.Decoder s tx)
-> (slot -> CBOR.Encoding)
-> (forall s. CBOR.Decoder s slot)
-> Codec (LocalTxMonitor txid tx slot) CBOR.DeserialiseFailure m ByteString
codecLocalTxMonitor :: forall txid tx slot (m :: * -> *).
MonadST m =>
NodeToClientVersion
-> (txid -> Encoding)
-> (forall s. Decoder s txid)
-> (tx -> Encoding)
-> (forall s. Decoder s tx)
-> (slot -> Encoding)
-> (forall s. Decoder s slot)
-> Codec
(LocalTxMonitor txid tx slot) DeserialiseFailure m ByteString
codecLocalTxMonitor NodeToClientVersion
version =
LocalTxMonitorVersion
-> (txid -> Encoding)
-> (forall s. Decoder s txid)
-> (tx -> Encoding)
-> (forall s. Decoder s tx)
-> (slot -> Encoding)
-> (forall s. Decoder s slot)
-> Codec
(LocalTxMonitor txid tx slot) DeserialiseFailure m ByteString
forall txid tx slot (m :: * -> *) ptcl.
(MonadST m, ptcl ~ LocalTxMonitor txid tx slot) =>
LocalTxMonitorVersion
-> (txid -> Encoding)
-> (forall s. Decoder s txid)
-> (tx -> Encoding)
-> (forall s. Decoder s tx)
-> (slot -> Encoding)
-> (forall s. Decoder s slot)
-> Codec
(LocalTxMonitor txid tx slot) DeserialiseFailure m ByteString
Codec.codecLocalTxMonitor LocalTxMonitorVersion
localTxMonitorVersion
where
localTxMonitorVersion :: LocalTxMonitorVersion
localTxMonitorVersion
| NodeToClientVersion
version NodeToClientVersion -> NodeToClientVersion -> Bool
forall a. Ord a => a -> a -> Bool
< NodeToClientVersion
NodeToClientV_20
= LocalTxMonitorVersion
Codec.LocalTxMonitor_V1
| Bool
otherwise
= LocalTxMonitorVersion
Codec.LocalTxMonitor_V2