use jni_sys::*;
pub unsafe trait JniType {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R;
}
unsafe impl JniType for () {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("V\0")
}
}
unsafe impl JniType for bool {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("Z\0")
}
}
unsafe impl JniType for jbyte {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("B\0")
}
}
unsafe impl JniType for jchar {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("C\0")
}
}
unsafe impl JniType for jshort {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("S\0")
}
}
unsafe impl JniType for jint {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("I\0")
}
}
unsafe impl JniType for jlong {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("J\0")
}
}
unsafe impl JniType for jfloat {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("F\0")
}
}
unsafe impl JniType for jdouble {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("D\0")
}
}
unsafe impl JniType for &str {
fn static_with_jni_type<R>(callback: impl FnOnce(&str) -> R) -> R {
callback("Ljava/lang/String;\0")
}
}