github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/courier/transport.go (about)

     1  package courier
     2  
     3  import (
     4  	"reflect"
     5  )
     6  
     7  type IDefaultsMarshal interface {
     8  	MarshalDefaults(v interface{})
     9  }
    10  
    11  type OperatorDecoder func(op IOperator, rv reflect.Value) error
    12  
    13  func NewOperatorBy(opType reflect.Type, defaultOp IOperator, decodeOperator OperatorDecoder) (op IOperator, err error) {
    14  	rv := reflect.New(opType)
    15  	op = rv.Interface().(IOperator)
    16  
    17  	if defaultsMarshal, ok := defaultOp.(IDefaultsMarshal); ok {
    18  		defaultsMarshal.MarshalDefaults(op)
    19  	}
    20  
    21  	err = decodeOperator(op, rv)
    22  	if err != nil {
    23  		return
    24  	}
    25  
    26  	return
    27  }