1use jni_sys::*;
2use std::ffi::CStr;
3
4pub unsafe trait JniType {
18 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R;
19}
20
21unsafe impl JniType for () {
22 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
23 callback(c"V")
24 }
25}
26unsafe impl JniType for bool {
27 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
28 callback(c"Z")
29 }
30}
31unsafe impl JniType for jbyte {
32 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
33 callback(c"B")
34 }
35}
36unsafe impl JniType for jchar {
37 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
38 callback(c"C")
39 }
40}
41unsafe impl JniType for jshort {
42 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
43 callback(c"S")
44 }
45}
46unsafe impl JniType for jint {
47 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
48 callback(c"I")
49 }
50}
51unsafe impl JniType for jlong {
52 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
53 callback(c"J")
54 }
55}
56unsafe impl JniType for jfloat {
57 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
58 callback(c"F")
59 }
60}
61unsafe impl JniType for jdouble {
62 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
63 callback(c"D")
64 }
65}
66unsafe impl JniType for &CStr {
67 fn static_with_jni_type<R>(callback: impl FnOnce(&CStr) -> R) -> R {
68 callback(c"Ljava/lang/String;")
69 }
70}