github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/helper/codec/inmem.go (about) 1 package codec 2 3 import ( 4 "errors" 5 "net/rpc" 6 "reflect" 7 ) 8 9 // InmemCodec is used to do an RPC call without going over a network 10 type InmemCodec struct { 11 Method string 12 Args interface{} 13 Reply interface{} 14 Err error 15 } 16 17 func (i *InmemCodec) ReadRequestHeader(req *rpc.Request) error { 18 req.ServiceMethod = i.Method 19 return nil 20 } 21 22 func (i *InmemCodec) ReadRequestBody(args interface{}) error { 23 sourceValue := reflect.Indirect(reflect.Indirect(reflect.ValueOf(i.Args))) 24 dst := reflect.Indirect(reflect.Indirect(reflect.ValueOf(args))) 25 dst.Set(sourceValue) 26 return nil 27 } 28 29 func (i *InmemCodec) WriteResponse(resp *rpc.Response, reply interface{}) error { 30 if resp.Error != "" { 31 i.Err = errors.New(resp.Error) 32 return nil 33 } 34 sourceValue := reflect.Indirect(reflect.Indirect(reflect.ValueOf(reply))) 35 dst := reflect.Indirect(reflect.Indirect(reflect.ValueOf(i.Reply))) 36 dst.Set(sourceValue) 37 return nil 38 } 39 40 func (i *InmemCodec) Close() error { 41 return nil 42 }