jobject toStorageDataType()

in java/com_spotify_voyager_jni_Index.cpp [189:230]


jobject toStorageDataType(JNIEnv *env, StorageDataType enumVal) {
  jclass enumClass =
      env->FindClass("com/spotify/voyager/jni/Index$StorageDataType");

  if (!enumClass) {
    throw std::runtime_error(
        "C++ bindings could not find StorageDataType Java enum!");
  }

  const char *enumValueName = nullptr;

  switch (enumVal) {
  case StorageDataType::Float8:
    enumValueName = "Float8";
    break;
  case StorageDataType::Float32:
    enumValueName = "Float32";
    break;
  case StorageDataType::E4M3:
    enumValueName = "E4M3";
    break;
  default:
    throw std::runtime_error(
        "Voyager C++ bindings received unknown enum value.");
  }

  jfieldID fieldID =
      env->GetStaticFieldID(enumClass, enumValueName,
                            "Lcom/spotify/voyager/jni/Index$StorageDataType;");
  if (!fieldID) {
    throw std::runtime_error(
        "C++ bindings could not find value in StorageDataType Java enum!");
  }

  jobject javaValue = env->GetStaticObjectField(enumClass, fieldID);
  if (!javaValue) {
    throw std::runtime_error("C++ bindings could not find static object field "
                             "for in StorageDataType Java enum!");
  }

  return javaValue;
}