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 }