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  }