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