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 }