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