github.com/tonyhb/nomad@v0.11.8/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  }