1pub trait AsJava<'a> {
5    fn java_fn(&self) -> String;
7}
8
9pub trait AsJavaPtr {
11    fn as_java_ptr(self) -> *const Self;
13}
14
15impl<T> AsJavaPtr for T {
16    fn as_java_ptr(self) -> *const Self {
17        Box::into_raw(Box::new(self))
18    }
19}
20
21impl<'a> AsJava<'a> for String {
22    fn java_fn(&self) -> String {
23        "NativeTools.getString".into()
24    }
25}
26
27macro_rules! conversion {
28    ($ty: ty => $other: ident: $func: ident) => {
29        impl<'a> AsJava<'a> for $ty {
30            fn java_fn(&self) -> String {
31                format!("NativeTools.{}", stringify!($func))
32            }
33        }
34    };
35}
36
37conversion!(u8 => jbyte: getByte);
38conversion!(u16 => jshort: getShort);
39conversion!(u32 => jint: getInt);
40conversion!(u64 => jlong: getLong);
41conversion!(i8 => jbyte: getByte);
42conversion!(i16 => jshort: getShort);
43conversion!(i32 => jint: getInt);
44conversion!(i64 => jlong: getLong);
45conversion!(char => jchar: getChar);
46conversion!(bool => jboolean: getBool);
47conversion!(f32 => jfloat: getFloat);
48conversion!(f64 => jdouble: getDouble);
49
50