func bytesToParticle(ptype int, buf []byte, offset int, length int) (interface{}, error) { switch ptype { case ParticleType.INTEGER: // return `int` for 64bit platforms for compatibility reasons if Buffer.Arch64Bits { return int(Buffer.VarBytesToInt64(buf, offset, length)), nil } return Buffer.VarBytesToInt64(buf, offset, length), nil case ParticleType.STRING: return string(buf[offset : offset+length]), nil case ParticleType.FLOAT: return Buffer.BytesToFloat64(buf, offset), nil case ParticleType.MAP: return newUnpacker(buf, offset, length).UnpackMap() case ParticleType.LIST: return newUnpacker(buf, offset, length).UnpackList() case ParticleType.GEOJSON: ncells := int(Buffer.BytesToInt16(buf, offset+1)) headerSize := 1 + 2 + (ncells * 8) return string(buf[offset+headerSize : offset+length]), nil case ParticleType.BLOB: newObj := make([]byte, length) copy(newObj, buf[offset:offset+length]) return newObj, nil case ParticleType.LDT: return newUnpacker(buf, offset, length).unpackObjects() } return nil, nil }
func bytesToKeyValue(pType int, buf []byte, offset int, len int) (Value, error) { switch pType { case ParticleType.STRING: return NewStringValue(string(buf[offset : offset+len])), nil case ParticleType.INTEGER: return NewLongValue(Buffer.VarBytesToInt64(buf, offset, len)), nil case ParticleType.FLOAT: return NewFloatValue(Buffer.BytesToFloat64(buf, offset)), nil case ParticleType.BLOB: bytes := make([]byte, len, len) copy(bytes, buf[offset:offset+len]) return NewBytesValue(bytes), nil default: return nil, NewAerospikeError(PARSE_ERROR, fmt.Sprintf("ParticleType %d not recognized. Please file a github issue.", pType)) } }