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