github.com/altipla-consulting/ravendb-go-client@v0.1.3/compare_exchange_result.go (about)

     1  package ravendb
     2  
     3  import (
     4  	"reflect"
     5  )
     6  
     7  // CompareExchangeResult describes result of compare exchange
     8  type CompareExchangeResult struct {
     9  	Value        interface{}
    10  	Index        int64
    11  	IsSuccessful bool
    12  }
    13  
    14  func parseCompareExchangeResultFromString(clazz reflect.Type, responseString []byte, conventions *DocumentConventions) (*CompareExchangeResult, error) {
    15  	var response map[string]interface{}
    16  	err := jsonUnmarshal(responseString, &response)
    17  	if err != nil {
    18  		return nil, err
    19  	}
    20  	index, ok := jsonGetAsInt64(response, "Index")
    21  	if !ok {
    22  		return nil, newIllegalStateError("Response is invalid. Index is missing")
    23  	}
    24  
    25  	successful, _ := jsonGetAsBool(response, "Successful")
    26  
    27  	var val interface{}
    28  	raw, ok := response["Value"]
    29  	if ok && raw != nil {
    30  		if m, ok := raw.(map[string]interface{}); ok {
    31  			val = m["Object"]
    32  		}
    33  	}
    34  
    35  	if val == nil {
    36  		exchangeResult := &CompareExchangeResult{}
    37  		exchangeResult.Index = index
    38  		exchangeResult.Value = getDefaultValueForType(clazz)
    39  		exchangeResult.IsSuccessful = successful
    40  		return exchangeResult, nil
    41  	}
    42  
    43  	result, err := convertValue(val, clazz)
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  
    48  	exchangeResult := &CompareExchangeResult{}
    49  	exchangeResult.Index = index
    50  	exchangeResult.Value = result
    51  	exchangeResult.IsSuccessful = successful
    52  	return exchangeResult, nil
    53  }