github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/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 if args == nil { 24 return nil 25 } 26 sourceValue := reflect.Indirect(reflect.Indirect(reflect.ValueOf(i.Args))) 27 dst := reflect.Indirect(reflect.Indirect(reflect.ValueOf(args))) 28 dst.Set(sourceValue) 29 return nil 30 } 31 32 func (i *InmemCodec) WriteResponse(resp *rpc.Response, reply interface{}) error { 33 if resp.Error != "" { 34 i.Err = errors.New(resp.Error) 35 return nil 36 } 37 sourceValue := reflect.Indirect(reflect.Indirect(reflect.ValueOf(reply))) 38 dst := reflect.Indirect(reflect.Indirect(reflect.ValueOf(i.Reply))) 39 dst.Set(sourceValue) 40 return nil 41 } 42 43 func (i *InmemCodec) Close() error { 44 return nil 45 }