github.com/datachainlab/cross@v0.2.2/x/packets/middlewares.go (about)

     1  package packets
     2  
     3  import (
     4  	sdk "github.com/cosmos/cosmos-sdk/types"
     5  	capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
     6  )
     7  
     8  // PacketMiddleware defines middleware interface of handling packets
     9  type PacketMiddleware interface {
    10  	// HandleMsg handles sdk.Msg
    11  	HandleMsg(ctx sdk.Context, msg sdk.Msg, ps PacketSender) (sdk.Context, PacketSender, error)
    12  	// HandlePacket handles a packet
    13  	HandlePacket(ctx sdk.Context, packet IncomingPacket, ps PacketSender, as ACKSender) (sdk.Context, PacketSender, ACKSender, error)
    14  	// HandleACK handles a packet and packet ack
    15  	HandleACK(ctx sdk.Context, packet IncomingPacket, ack IncomingPacketAcknowledgement, ps PacketSender) (sdk.Context, PacketSender, error)
    16  }
    17  
    18  // nopPacketMiddleware is middleware that does nothing
    19  type nopPacketMiddleware struct{}
    20  
    21  var _ PacketMiddleware = (*nopPacketMiddleware)(nil)
    22  
    23  // NewNOPPacketMiddleware returns nopPacketMiddleware
    24  func NewNOPPacketMiddleware() PacketMiddleware {
    25  	return nopPacketMiddleware{}
    26  }
    27  
    28  // HandleMsg implements PacketMiddleware.HandleMsg
    29  func (m nopPacketMiddleware) HandleMsg(ctx sdk.Context, msg sdk.Msg, ps PacketSender) (sdk.Context, PacketSender, error) {
    30  	return ctx, ps, nil
    31  }
    32  
    33  // HandlePacket implements PacketMiddleware.HandlePacket
    34  func (m nopPacketMiddleware) HandlePacket(ctx sdk.Context, packet IncomingPacket, ps PacketSender, as ACKSender) (sdk.Context, PacketSender, ACKSender, error) {
    35  	return ctx, ps, as, nil
    36  }
    37  
    38  // HandlePacket implements PacketMiddleware.HandleACK
    39  func (m nopPacketMiddleware) HandleACK(ctx sdk.Context, packet IncomingPacket, ack IncomingPacketAcknowledgement, ps PacketSender) (sdk.Context, PacketSender, error) {
    40  	return ctx, ps, nil
    41  }
    42  
    43  // PacketSender defines packet-sender interface
    44  type PacketSender interface {
    45  	SendPacket(
    46  		ctx sdk.Context,
    47  		channelCap *capabilitytypes.Capability,
    48  		packet OutgoingPacket,
    49  	) error
    50  }
    51  
    52  type basicPacketSender struct {
    53  	channelKeeper ChannelKeeper
    54  }
    55  
    56  // NewBasicPacketSender returns a new PacketSender instance
    57  func NewBasicPacketSender(channelKeeper ChannelKeeper) PacketSender {
    58  	return basicPacketSender{channelKeeper: channelKeeper}
    59  }
    60  
    61  func (s basicPacketSender) SendPacket(
    62  	ctx sdk.Context,
    63  	channelCap *capabilitytypes.Capability,
    64  	packet OutgoingPacket,
    65  ) error {
    66  	return s.channelKeeper.SendPacket(ctx, channelCap, packet)
    67  }
    68  
    69  // ACKSender defines packet acknowledgement sender interface
    70  type ACKSender interface {
    71  	SendACK(
    72  		ctx sdk.Context,
    73  		ack OutgoingPacketAcknowledgement,
    74  	) error
    75  }
    76  
    77  type basicACKSender struct{}
    78  
    79  var _ ACKSender = (*basicACKSender)(nil)
    80  
    81  // NewBasicACKSender returns a new ACKSender instance
    82  func NewBasicACKSender() ACKSender {
    83  	return &basicACKSender{}
    84  }
    85  
    86  func (s *basicACKSender) SendACK(ctx sdk.Context, ack OutgoingPacketAcknowledgement) error {
    87  	return nil
    88  }