github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/auth/ibcsigning/handler_map.go (about) 1 package signing 2 3 import ( 4 "fmt" 5 6 ibctx "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/ibc-adapter" 7 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/tx/signing" 8 ) 9 10 // SignModeHandlerMap is SignModeHandler that aggregates multiple SignModeHandler's into 11 // a single handler 12 type SignModeHandlerMap struct { 13 defaultMode signing.SignMode 14 modes []signing.SignMode 15 signModeHandlers map[signing.SignMode]SignModeHandler 16 } 17 18 var _ SignModeHandler = SignModeHandlerMap{} 19 20 // NewSignModeHandlerMap returns a new SignModeHandlerMap with the provided defaultMode and handlers 21 func NewSignModeHandlerMap(defaultMode signing.SignMode, handlers []SignModeHandler) SignModeHandlerMap { 22 handlerMap := make(map[signing.SignMode]SignModeHandler) 23 var modes []signing.SignMode 24 25 for _, h := range handlers { 26 for _, m := range h.Modes() { 27 if _, have := handlerMap[m]; have { 28 panic(fmt.Errorf("duplicate sign mode handler for mode %s", m)) 29 } 30 handlerMap[m] = h 31 modes = append(modes, m) 32 } 33 } 34 35 return SignModeHandlerMap{ 36 defaultMode: defaultMode, 37 modes: modes, 38 signModeHandlers: handlerMap, 39 } 40 } 41 42 // DefaultMode implements SignModeHandler.DefaultMode 43 func (h SignModeHandlerMap) DefaultMode() signing.SignMode { 44 return h.defaultMode 45 } 46 47 // Modes implements SignModeHandler.Modes 48 func (h SignModeHandlerMap) Modes() []signing.SignMode { 49 return h.modes 50 } 51 52 // DefaultMode implements SignModeHandler.GetSignBytes 53 func (h SignModeHandlerMap) GetSignBytes(mode signing.SignMode, data SignerData, tx ibctx.Tx) ([]byte, error) { 54 handler, found := h.signModeHandlers[mode] 55 if !found { 56 return nil, fmt.Errorf("can't verify sign mode %s", mode.String()) 57 } 58 return handler.GetSignBytes(mode, data, tx) 59 }