diff --git a/ffi/src/plugin.rs b/ffi/src/plugin.rs index 125b10f..fa79063 100644 --- a/ffi/src/plugin.rs +++ b/ffi/src/plugin.rs @@ -484,6 +484,30 @@ pub unsafe extern "C" fn esp_plugin_is_valid_as_light_plugin( .unwrap_or(ESP_ERROR_PANICKED) } +#[no_mangle] +pub unsafe extern "C" fn esp_plugin_is_valid_as_medium_plugin( + plugin_ptr: *const Plugin, + is_valid: *mut bool, +) -> u32 { + panic::catch_unwind(|| { + if plugin_ptr.is_null() || is_valid.is_null() { + error(ESP_ERROR_NULL_POINTER, "Null pointer passed") + } else { + let plugin = &*plugin_ptr; + + match plugin.is_valid_as_medium_plugin() { + Ok(x) => { + *is_valid = x; + ESP_OK + } + Err(e) => handle_error(e), + } + } + }) + .unwrap_or(ESP_ERROR_PANICKED) +} + + #[no_mangle] pub unsafe extern "C" fn esp_plugin_is_valid_as_override_plugin( plugin_ptr: *const Plugin, diff --git a/ffi/tests/ffi.cpp b/ffi/tests/ffi.cpp index 1e0e524..93d4d0e 100644 --- a/ffi/tests/ffi.cpp +++ b/ffi/tests/ffi.cpp @@ -311,6 +311,23 @@ void test_esp_plugin_is_valid_as_light_plugin() { esp_plugin_free(plugin); } +void test_esp_plugin_is_valid_as_medium_plugin() { + printf("testing esp_plugin_is_valid_as_medium_plugin()...\n"); + Plugin * plugin; + auto return_code = esp_plugin_new(&plugin, ESP_GAME_STARFIELD, "../../testing-plugins/Starfield/Data/Blank.medium.esm"); + assert(return_code == ESP_OK); + + return_code = esp_plugin_parse(plugin, true); + assert(return_code == ESP_OK); + + bool is_valid; + return_code = esp_plugin_is_valid_as_medium_plugin(plugin, &is_valid); + assert(return_code == ESP_OK); + assert(is_valid); + + esp_plugin_free(plugin); +} + void test_esp_plugin_is_valid_as_override_plugin() { printf("testing esp_plugin_is_valid_as_override_plugin()...\n"); Plugin * plugin; @@ -349,6 +366,7 @@ int main() { test_esp_plugin_records_overlap_size(); test_esp_plugin_is_valid_as_light_master(); test_esp_plugin_is_valid_as_light_plugin(); + test_esp_plugin_is_valid_as_medium_plugin(); test_esp_plugin_is_valid_as_override_plugin(); printf("SUCCESS\n");