@@ -72,6 +72,26 @@ impl<'j, T: FromJava<'j, T = jni::objects::JObject<'j>>> FromJava<'j> for Option
72
72
}
73
73
}
74
74
75
+ #[ cfg( feature = "uuid" ) ]
76
+ impl < ' j > FromJava < ' j > for uuid:: Uuid {
77
+ type T = jni:: objects:: JObject < ' j > ;
78
+ fn from_java ( env : & mut jni:: JNIEnv < ' j > , uuid : Self :: T ) -> Result < Self , jni:: errors:: Error > {
79
+ let lsb = u64:: from_ne_bytes (
80
+ env. call_method ( & uuid, "getLeastSignificantBits" , "()J" , & [ ] ) ?
81
+ . j ( ) ?
82
+ . to_ne_bytes ( )
83
+ ) ;
84
+
85
+ let msb = u64:: from_ne_bytes (
86
+ env. call_method ( & uuid, "getMostSignificantBits" , "()J" , & [ ] ) ?
87
+ . j ( ) ?
88
+ . to_ne_bytes ( )
89
+ ) ;
90
+
91
+ Ok ( uuid:: Uuid :: from_u64_pair ( msb, lsb) )
92
+ }
93
+ }
94
+
75
95
pub trait IntoJava < ' j > {
76
96
type T ;
77
97
@@ -142,3 +162,16 @@ impl<'j, T: IntoJava<'j, T = jni::sys::jobject>> IntoJava<'j> for Option<T> {
142
162
}
143
163
}
144
164
}
165
+
166
+ #[ cfg( feature = "uuid" ) ]
167
+ impl < ' j > IntoJava < ' j > for uuid:: Uuid {
168
+ type T = jni:: sys:: jobject ;
169
+ fn into_java ( self , env : & mut jni:: JNIEnv < ' j > ) -> Result < Self :: T , jni:: errors:: Error > {
170
+ let class = env. find_class ( "java/util/UUID" ) ?;
171
+ let ( msb, lsb) = self . as_u64_pair ( ) ;
172
+ let msb = i64:: from_ne_bytes ( msb. to_ne_bytes ( ) ) ;
173
+ let lsb = i64:: from_ne_bytes ( lsb. to_ne_bytes ( ) ) ;
174
+ env. new_object ( & class, "(JJ)V" , & [ jni:: objects:: JValueGen :: Long ( msb) , jni:: objects:: JValueGen :: Long ( lsb) ] )
175
+ . map ( |j| j. as_raw ( ) )
176
+ }
177
+ }
0 commit comments