github.com/cosmos/cosmos-sdk@v0.50.10/types/tx/msgs.go (about)

     1  package tx
     2  
     3  import (
     4  	fmt "fmt"
     5  
     6  	"github.com/cosmos/cosmos-sdk/codec/types"
     7  	sdk "github.com/cosmos/cosmos-sdk/types"
     8  )
     9  
    10  const (
    11  	msgResponseInterfaceProtoName = "cosmos.tx.v1beta1.MsgResponse"
    12  )
    13  
    14  // MsgResponse is the interface all Msg server handlers' response types need to
    15  // implement. It's the interface that's representing all Msg responses packed
    16  // in Anys.
    17  type MsgResponse interface{}
    18  
    19  // SetMsgs takes a slice of sdk.Msg's and turn them into Any's.
    20  func SetMsgs(msgs []sdk.Msg) ([]*types.Any, error) {
    21  	anys := make([]*types.Any, len(msgs))
    22  	for i, msg := range msgs {
    23  		var err error
    24  		anys[i], err = types.NewAnyWithValue(msg)
    25  		if err != nil {
    26  			return nil, err
    27  		}
    28  	}
    29  	return anys, nil
    30  }
    31  
    32  // GetMsgs takes a slice of Any's and turn them into sdk.Msg's.
    33  func GetMsgs(anys []*types.Any, name string) ([]sdk.Msg, error) {
    34  	msgs := make([]sdk.Msg, len(anys))
    35  	for i, any := range anys {
    36  		cached := any.GetCachedValue()
    37  		if cached == nil {
    38  			return nil, fmt.Errorf("any cached value is nil, %s messages must be correctly packed any values", name)
    39  		}
    40  		msgs[i] = cached.(sdk.Msg)
    41  	}
    42  	return msgs, nil
    43  }
    44  
    45  // UnpackInterfaces unpacks Any's to sdk.Msg's.
    46  func UnpackInterfaces(unpacker types.AnyUnpacker, anys []*types.Any) error {
    47  	for _, any := range anys {
    48  		var msg sdk.Msg
    49  		err := unpacker.UnpackAny(any, &msg)
    50  		if err != nil {
    51  			return err
    52  		}
    53  	}
    54  
    55  	return nil
    56  }