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  }