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")
    }
}