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", so this trait is not object safe.

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 bool

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 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§