github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/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 }