Skip to main content

JniType

Trait JniType 

Source
pub unsafe trait JniType {
    // Required method
    fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R;
}
Expand description

JNI bindings rely on this type being accurate.

unsafe: static_with_jni_type must pass a string terminated by ‘\0’. Failing to do so is a soundness bug, as the string is passed directly to JNI as a raw pointer! Additionally, passing the wrong type may be a soundness bug as although the Android JVM will simply panic and abort, I’ve no idea if that’s a guarantee or not.

Why the awkward callback style instead of returning &'static str? Arrays of arrays may need to dynamically construct their type strings, which would need to leak. Worse, we can’t easily intern those strings via lazy_static without running into:

error[E0401]: can't use generic parameters from outer function

Required Methods§

Source

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl JniType for &str

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for ()

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for bool

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for jbyte

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for jchar

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for jdouble

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for jfloat

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for jint

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for jlong

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Source§

impl JniType for jshort

Source§

fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R

Implementors§