{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Ouroboros.Network.Protocol.LocalTxMonitor.Codec
( codecLocalTxMonitor
, codecLocalTxMonitorId
) where
import Control.Monad.Class.MonadST
import Network.TypedProtocol.Codec.CBOR
import Network.TypedProtocol.Core
import Data.ByteString.Lazy (ByteString)
import Codec.CBOR.Decoding qualified as CBOR
import Codec.CBOR.Encoding qualified as CBOR
import Codec.CBOR.Read qualified as CBOR
import Text.Printf
import Ouroboros.Network.Protocol.LocalTxMonitor.Type
codecLocalTxMonitor ::
forall txid tx slot m ptcl.
( MonadST m
, ptcl ~ LocalTxMonitor txid tx slot
)
=> (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 :: * -> *) ptcl.
(MonadST m, ptcl ~ LocalTxMonitor txid tx slot) =>
(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 txid -> Encoding
encodeTxId forall s. Decoder s txid
decodeTxId
tx -> Encoding
encodeTx forall s. Decoder s tx
decodeTx
slot -> Encoding
encodeSlot forall s. Decoder s slot
decodeSlot =
(forall (st :: LocalTxMonitor txid tx slot)
(st' :: LocalTxMonitor txid tx slot).
(StateTokenI st, ActiveState st) =>
Message (LocalTxMonitor txid tx slot) st st' -> Encoding)
-> (forall (st :: LocalTxMonitor txid tx slot) s.
ActiveState st =>
StateToken st -> Decoder s (SomeMessage st))
-> Codec
(LocalTxMonitor txid tx slot) DeserialiseFailure m ByteString
forall ps (m :: * -> *).
MonadST m =>
(forall (st :: ps) (st' :: ps).
(StateTokenI st, ActiveState st) =>
Message ps st st' -> Encoding)
-> (forall (st :: ps) s.
ActiveState st =>
StateToken st -> Decoder s (SomeMessage st))
-> Codec ps DeserialiseFailure m ByteString
mkCodecCborLazyBS Message ptcl st st' -> Encoding
Message (LocalTxMonitor txid tx slot) st st' -> Encoding
forall (st :: ptcl) (st' :: ptcl). Message ptcl st st' -> Encoding
forall (st :: LocalTxMonitor txid tx slot)
(st' :: LocalTxMonitor txid tx slot).
(StateTokenI st, ActiveState st) =>
Message (LocalTxMonitor txid tx slot) st st' -> Encoding
encode StateToken st -> Decoder s (SomeMessage st)
StateToken st -> Decoder s (SomeMessage st)
forall s (st :: ptcl).
ActiveState st =>
StateToken st -> Decoder s (SomeMessage st)
forall (st :: LocalTxMonitor txid tx slot) s.
ActiveState st =>
StateToken st -> Decoder s (SomeMessage st)
decode
where
encode ::
forall (st :: ptcl) (st' :: ptcl).
Message ptcl st st'
-> CBOR.Encoding
encode :: forall (st :: ptcl) (st' :: ptcl). Message ptcl st st' -> Encoding
encode = \case
Message ptcl st st'
R:MessageLocalTxMonitorfromto (*) (*) (*) txid tx slot st st'
MsgDone ->
Word -> Encoding
CBOR.encodeListLen Word
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
0
Message ptcl st st'
R:MessageLocalTxMonitorfromto (*) (*) (*) txid tx slot st st'
MsgAcquire ->
Word -> Encoding
CBOR.encodeListLen Word
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
1
Message ptcl st st'
R:MessageLocalTxMonitorfromto (*) (*) (*) txid tx slot st st'
MsgAwaitAcquire ->
Word -> Encoding
CBOR.encodeListLen Word
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
1
Message ptcl st st'
R:MessageLocalTxMonitorfromto (*) (*) (*) txid tx slot st st'
MsgRelease ->
Word -> Encoding
CBOR.encodeListLen Word
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
3
Message ptcl st st'
R:MessageLocalTxMonitorfromto (*) (*) (*) txid tx slot st st'
MsgNextTx ->
Word -> Encoding
CBOR.encodeListLen Word
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
5
MsgHasTx txid1
txid ->
Word -> Encoding
CBOR.encodeListLen Word
2 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
7 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> txid -> Encoding
encodeTxId txid
txid1
txid
Message ptcl st st'
R:MessageLocalTxMonitorfromto (*) (*) (*) txid tx slot st st'
MsgGetSizes ->
Word -> Encoding
CBOR.encodeListLen Word
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
9
MsgAcquired slot1
slot ->
Word -> Encoding
CBOR.encodeListLen Word
2 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
2 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> slot -> Encoding
encodeSlot slot
slot1
slot
MsgReplyNextTx Maybe tx1
Nothing ->
Word -> Encoding
CBOR.encodeListLen Word
1 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
6
MsgReplyNextTx (Just tx1
tx) ->
Word -> Encoding
CBOR.encodeListLen Word
2 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
6 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> tx -> Encoding
encodeTx tx
tx1
tx
MsgReplyHasTx Bool
has ->
Word -> Encoding
CBOR.encodeListLen Word
2 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
8 Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Bool -> Encoding
CBOR.encodeBool Bool
has
MsgReplyGetSizes MempoolSizeAndCapacity
sz ->
Word -> Encoding
CBOR.encodeListLen Word
2
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeWord Word
10
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word -> Encoding
CBOR.encodeListLen Word
3
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word32 -> Encoding
CBOR.encodeWord32 (MempoolSizeAndCapacity -> Word32
capacityInBytes MempoolSizeAndCapacity
sz)
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word32 -> Encoding
CBOR.encodeWord32 (MempoolSizeAndCapacity -> Word32
sizeInBytes MempoolSizeAndCapacity
sz)
Encoding -> Encoding -> Encoding
forall a. Semigroup a => a -> a -> a
<> Word32 -> Encoding
CBOR.encodeWord32 (MempoolSizeAndCapacity -> Word32
numberOfTxs MempoolSizeAndCapacity
sz)
decode ::
forall s (st :: ptcl).
ActiveState st
=> StateToken st
-> CBOR.Decoder s (SomeMessage st)
decode :: forall s (st :: ptcl).
ActiveState st =>
StateToken st -> Decoder s (SomeMessage st)
decode StateToken st
stok = do
len <- Decoder s Int
forall s. Decoder s Int
CBOR.decodeListLen
key <- CBOR.decodeWord
case (stok, len, key) of
(SingLocalTxMonitor st
SingIdle, Int
1, Word
0) ->
SomeMessage st -> Decoder s (SomeMessage st)
forall a. a -> Decoder s a
forall (m :: * -> *) a. Monad m => a -> m a
return (Message ptcl st 'StDone -> SomeMessage st
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, StateTokenI st', ActiveState st) =>
Message ps st st' -> SomeMessage st
SomeMessage Message ptcl st 'StDone
Message (LocalTxMonitor txid tx slot) 'StIdle 'StDone
forall {k} {k1} {k2} (txid :: k) (tx :: k1) (slot :: k2).
Message (LocalTxMonitor txid tx slot) 'StIdle 'StDone
MsgDone)
(SingLocalTxMonitor st
SingIdle, Int
1, Word
1) ->
SomeMessage st -> Decoder s (SomeMessage st)
forall a. a -> Decoder s a
forall (m :: * -> *) a. Monad m => a -> m a
return (Message ptcl st 'StAcquiring -> SomeMessage st
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, StateTokenI st', ActiveState st) =>
Message ps st st' -> SomeMessage st
SomeMessage Message ptcl st 'StAcquiring
Message (LocalTxMonitor txid tx slot) 'StIdle 'StAcquiring
forall {k} {k1} {k2} (txid :: k) (tx :: k1) (slot :: k2).
Message (LocalTxMonitor txid tx slot) 'StIdle 'StAcquiring
MsgAcquire)
(SingLocalTxMonitor st
SingAcquired, Int
1, Word
1) ->
SomeMessage st -> Decoder s (SomeMessage st)
forall a. a -> Decoder s a
forall (m :: * -> *) a. Monad m => a -> m a
return (Message ptcl st 'StAcquiring -> SomeMessage st
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, StateTokenI st', ActiveState st) =>
Message ps st st' -> SomeMessage st
SomeMessage Message ptcl st 'StAcquiring
Message (LocalTxMonitor txid tx slot) 'StAcquired 'StAcquiring
forall {k} {k1} {k2} (txid :: k) (tx :: k1) (slot :: k2).
Message (LocalTxMonitor txid tx slot) 'StAcquired 'StAcquiring
MsgAwaitAcquire)
(SingLocalTxMonitor st
SingAcquired, Int
1, Word
3) ->
SomeMessage st -> Decoder s (SomeMessage st)
forall a. a -> Decoder s a
forall (m :: * -> *) a. Monad m => a -> m a
return (Message ptcl st 'StIdle -> SomeMessage st
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, StateTokenI st', ActiveState st) =>
Message ps st st' -> SomeMessage st
SomeMessage Message ptcl st 'StIdle
Message (LocalTxMonitor txid tx slot) 'StAcquired 'StIdle
forall {k} {k1} {k2} (txid :: k) (tx :: k1) (slot :: k2).
Message (LocalTxMonitor txid tx slot) 'StAcquired 'StIdle
MsgRelease)
(SingLocalTxMonitor st
SingAcquired, Int
1, Word
5) ->
SomeMessage st -> Decoder s (SomeMessage st)
forall a. a -> Decoder s a
forall (m :: * -> *) a. Monad m => a -> m a
return (Message ptcl st ('StBusy 'NextTx) -> SomeMessage st
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, StateTokenI st', ActiveState st) =>
Message ps st st' -> SomeMessage st
SomeMessage Message ptcl st ('StBusy 'NextTx)
Message (LocalTxMonitor txid tx slot) 'StAcquired ('StBusy 'NextTx)
forall {k} {k1} {k2} (txid :: k) (tx :: k1) (slot :: k2).
Message (LocalTxMonitor txid tx slot) 'StAcquired ('StBusy 'NextTx)
MsgNextTx)
(SingLocalTxMonitor st
SingAcquired, Int
2, Word
7) -> do
txid <- Decoder s txid
forall s. Decoder s txid
decodeTxId
return (SomeMessage (MsgHasTx txid))
(SingLocalTxMonitor st
SingAcquired, Int
1, Word
9) ->
SomeMessage st -> Decoder s (SomeMessage st)
forall a. a -> Decoder s a
forall (m :: * -> *) a. Monad m => a -> m a
return (Message ptcl st ('StBusy 'GetSizes) -> SomeMessage st
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, StateTokenI st', ActiveState st) =>
Message ps st st' -> SomeMessage st
SomeMessage Message ptcl st ('StBusy 'GetSizes)
Message
(LocalTxMonitor txid tx slot) 'StAcquired ('StBusy 'GetSizes)
forall {k} {k1} {k2} (txid :: k) (tx :: k1) (slot :: k2).
Message
(LocalTxMonitor txid tx slot) 'StAcquired ('StBusy 'GetSizes)
MsgGetSizes)
(SingLocalTxMonitor st
SingAcquiring, Int
2, Word
2) -> do
slot <- Decoder s slot
forall s. Decoder s slot
decodeSlot
return (SomeMessage (MsgAcquired slot))
(SingBusy SingBusyKind k3
SingNextTx, Int
1, Word
6) ->
SomeMessage st -> Decoder s (SomeMessage st)
forall a. a -> Decoder s a
forall (m :: * -> *) a. Monad m => a -> m a
return (Message ptcl st 'StAcquired -> SomeMessage st
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, StateTokenI st', ActiveState st) =>
Message ps st st' -> SomeMessage st
SomeMessage (Maybe tx
-> Message
(LocalTxMonitor txid tx slot) ('StBusy 'NextTx) 'StAcquired
forall {k} {k2} tx1 (txid :: k) (slot :: k2).
Maybe tx1
-> Message
(LocalTxMonitor txid tx1 slot) ('StBusy 'NextTx) 'StAcquired
MsgReplyNextTx Maybe tx
forall a. Maybe a
Nothing))
(SingBusy SingBusyKind k3
SingNextTx, Int
2, Word
6) -> do
tx <- Decoder s tx
forall s. Decoder s tx
decodeTx
return (SomeMessage (MsgReplyNextTx (Just tx)))
(SingBusy SingBusyKind k3
SingHasTx, Int
2, Word
8) -> do
has <- Decoder s Bool
forall s. Decoder s Bool
CBOR.decodeBool
return (SomeMessage (MsgReplyHasTx has))
(SingBusy SingBusyKind k3
SingGetSizes, Int
2, Word
10) -> do
_len <- Decoder s Int
forall s. Decoder s Int
CBOR.decodeListLen
capacityInBytes <- CBOR.decodeWord32
sizeInBytes <- CBOR.decodeWord32
numberOfTxs <- CBOR.decodeWord32
let sizes = MempoolSizeAndCapacity { Word32
capacityInBytes :: Word32
capacityInBytes :: Word32
capacityInBytes, Word32
sizeInBytes :: Word32
sizeInBytes :: Word32
sizeInBytes, Word32
numberOfTxs :: Word32
numberOfTxs :: Word32
numberOfTxs }
return (SomeMessage (MsgReplyGetSizes sizes))
(SingLocalTxMonitor st
SingDone, Int
_, Word
_) -> StateToken 'StDone -> forall a. a
forall ps (st :: ps).
(StateAgency st ~ 'NobodyAgency, ActiveState st) =>
StateToken st -> forall a. a
notActiveState StateToken st
StateToken 'StDone
stok
(SingLocalTxMonitor st
_, Int
_, Word
_) ->
String -> Decoder s (SomeMessage st)
forall a. String -> Decoder s a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> String -> String -> Word -> Int -> String
forall r. PrintfType r => String -> r
printf String
"codecLocalTxMonitor (%s, %s) unexpected key (%d, %d)"
(ActiveAgency' st (StateAgency st) -> String
forall a. Show a => a -> String
show (ActiveAgency' st (StateAgency st)
ActiveAgency' st (StateAgency st)
forall {ps} (st :: ps) (agency :: Agency).
IsActiveState st agency =>
ActiveAgency' st agency
activeAgency :: ActiveAgency st)) (SingLocalTxMonitor st -> String
forall a. Show a => a -> String
show StateToken st
SingLocalTxMonitor st
stok) Word
key Int
len)
codecLocalTxMonitorId ::
forall txid tx slot m ptcl.
( Monad m
, ptcl ~ LocalTxMonitor txid tx slot
)
=> Codec ptcl CodecFailure m (AnyMessage ptcl)
codecLocalTxMonitorId :: forall {k} {k1} {k2} (txid :: k) (tx :: k1) (slot :: k2)
(m :: * -> *) ptcl.
(Monad m, ptcl ~ LocalTxMonitor txid tx slot) =>
Codec ptcl CodecFailure m (AnyMessage ptcl)
codecLocalTxMonitorId =
(forall (st :: ptcl) (st' :: ptcl).
(StateTokenI st, ActiveState st) =>
Message ptcl st st' -> AnyMessage ptcl)
-> (forall (st :: ptcl).
ActiveState st =>
StateToken st
-> m (DecodeStep
(AnyMessage ptcl) CodecFailure m (SomeMessage st)))
-> Codec ptcl CodecFailure m (AnyMessage ptcl)
forall ps failure (m :: * -> *) bytes.
(forall (st :: ps) (st' :: ps).
(StateTokenI st, ActiveState st) =>
Message ps st st' -> bytes)
-> (forall (st :: ps).
ActiveState st =>
StateToken st -> m (DecodeStep bytes failure m (SomeMessage st)))
-> Codec ps failure m bytes
Codec Message ptcl st st' -> AnyMessage ptcl
forall (st :: ptcl) (st' :: ptcl).
(StateTokenI st, ActiveState st) =>
Message ptcl st st' -> AnyMessage ptcl
encode StateToken st
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st :: ptcl).
ActiveState st =>
StateToken st
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
decode
where
encode ::
forall st st'.
StateTokenI st
=> ActiveState st
=> Message ptcl st st'
-> AnyMessage ptcl
encode :: forall (st :: ptcl) (st' :: ptcl).
(StateTokenI st, ActiveState st) =>
Message ptcl st st' -> AnyMessage ptcl
encode = Message ptcl st st' -> AnyMessage ptcl
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, ActiveState st) =>
Message ps st st' -> AnyMessage ps
AnyMessage
decode ::
forall (st :: ptcl).
ActiveState st
=> StateToken st
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
decode :: forall (st :: ptcl).
ActiveState st =>
StateToken st
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
decode StateToken st
stok =
let res :: (StateTokenI st, StateTokenI st')
=> Message ptcl st st' -> m (DecodeStep bytes failure m (SomeMessage st))
res :: forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
msg = DecodeStep bytes failure m (SomeMessage st)
-> m (DecodeStep bytes failure m (SomeMessage st))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (SomeMessage st
-> Maybe bytes -> DecodeStep bytes failure m (SomeMessage st)
forall bytes failure (m :: * -> *) a.
a -> Maybe bytes -> DecodeStep bytes failure m a
DecodeDone (Message ptcl st st' -> SomeMessage st
forall ps (st :: ps) (st' :: ps).
(StateTokenI st, StateTokenI st', ActiveState st) =>
Message ps st st' -> SomeMessage st
SomeMessage Message ptcl st st'
msg) Maybe bytes
forall a. Maybe a
Nothing)
in DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
-> m (DecodeStep
(AnyMessage ptcl) CodecFailure m (SomeMessage st)))
-> DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall a b. (a -> b) -> a -> b
$ (Maybe (AnyMessage ptcl)
-> m (DecodeStep
(AnyMessage ptcl) CodecFailure m (SomeMessage st)))
-> DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
forall bytes failure (m :: * -> *) a.
(Maybe bytes -> m (DecodeStep bytes failure m a))
-> DecodeStep bytes failure m a
DecodePartial ((Maybe (AnyMessage ptcl)
-> m (DecodeStep
(AnyMessage ptcl) CodecFailure m (SomeMessage st)))
-> DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
-> (Maybe (AnyMessage ptcl)
-> m (DecodeStep
(AnyMessage ptcl) CodecFailure m (SomeMessage st)))
-> DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
forall a b. (a -> b) -> a -> b
$ \Maybe (AnyMessage ptcl)
bytes -> case (StateToken st
SingLocalTxMonitor st
stok, Maybe (AnyMessage ptcl)
bytes) of
(SingLocalTxMonitor st
SingIdle, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgAcquire{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingLocalTxMonitor st
SingIdle, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgDone{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingLocalTxMonitor st
SingAcquired, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgAwaitAcquire{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingLocalTxMonitor st
SingAcquired, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgNextTx{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingLocalTxMonitor st
SingAcquired, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgHasTx{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingLocalTxMonitor st
SingAcquired, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgRelease{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingLocalTxMonitor st
SingAcquiring, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgAcquired{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingBusy SingBusyKind k3
SingNextTx, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgReplyNextTx{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingBusy SingBusyKind k3
SingHasTx, Just (AnyMessage msg :: Message ptcl st st'
msg@MsgReplyHasTx{})) -> Message ptcl st st'
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall (st' :: ptcl) bytes failure.
(StateTokenI st, StateTokenI st') =>
Message ptcl st st'
-> m (DecodeStep bytes failure m (SomeMessage st))
res Message ptcl st st'
Message ptcl st st'
msg
(SingLocalTxMonitor st
SingDone, Maybe (AnyMessage ptcl)
_) -> StateToken 'StDone -> forall a. a
forall ps (st :: ps).
(StateAgency st ~ 'NobodyAgency, ActiveState st) =>
StateToken st -> forall a. a
notActiveState StateToken st
StateToken 'StDone
stok
(SingLocalTxMonitor st
_, Maybe (AnyMessage ptcl)
Nothing) ->
DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (CodecFailure
-> DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
forall bytes failure (m :: * -> *) a.
failure -> DecodeStep bytes failure m a
DecodeFail CodecFailure
CodecFailureOutOfInput)
(SingLocalTxMonitor st
_, Maybe (AnyMessage ptcl)
_) ->
DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
-> m (DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (CodecFailure
-> DecodeStep (AnyMessage ptcl) CodecFailure m (SomeMessage st)
forall bytes failure (m :: * -> *) a.
failure -> DecodeStep bytes failure m a
DecodeFail (String -> CodecFailure
CodecFailure String
"codecLocalTxMonitorId: no matching message"))