@@ -79,15 +79,15 @@ macro_rules! auto_into_java_object {
79
79
}
80
80
81
81
auto_into_java_object ! ( jni:: objects:: JString <' j>, "java/lang/String" ) ;
82
- // auto_into_java_object!(jni::objects::JObjectArray<'j>, "java/lang/Object[]");
83
- // auto_into_java_object!(jni::objects::JIntArray<'j>, "java/lang/Integer[]");
84
- // auto_into_java_object!(jni::objects::JLongArray<'j>, "java/lang/Long[]");
85
- // auto_into_java_object!(jni::objects::JShortArray<'j>, "java/lang/Short[]");
86
- // auto_into_java_object!(jni::objects::JByteArray<'j>, "java/lang/Byte[]");
87
- // auto_into_java_object!(jni::objects::JCharArray<'j>, "java/lang/Char[]");
88
- // auto_into_java_object!(jni::objects::JFloatArray<'j>, "java/lang/Float[]");
89
- // auto_into_java_object!(jni::objects::JDoubleArray<'j>, "java/lang/Double[]");
90
- // auto_into_java_object!(jni::objects::JBooleanArray<'j>, "java/lang/Boolean[]");
82
+ auto_into_java_object ! ( jni:: objects:: JObjectArray <' j>, "java/lang/Object[]" ) ;
83
+ auto_into_java_object ! ( jni:: objects:: JIntArray <' j>, "java/lang/Integer[]" ) ;
84
+ auto_into_java_object ! ( jni:: objects:: JLongArray <' j>, "java/lang/Long[]" ) ;
85
+ auto_into_java_object ! ( jni:: objects:: JShortArray <' j>, "java/lang/Short[]" ) ;
86
+ auto_into_java_object ! ( jni:: objects:: JByteArray <' j>, "java/lang/Byte[]" ) ;
87
+ auto_into_java_object ! ( jni:: objects:: JCharArray <' j>, "java/lang/Char[]" ) ;
88
+ auto_into_java_object ! ( jni:: objects:: JFloatArray <' j>, "java/lang/Float[]" ) ;
89
+ auto_into_java_object ! ( jni:: objects:: JDoubleArray <' j>, "java/lang/Double[]" ) ;
90
+ auto_into_java_object ! ( jni:: objects:: JBooleanArray <' j>, "java/lang/Boolean[]" ) ;
91
91
92
92
93
93
impl < ' j > IntoJavaObject < ' j > for & str {
@@ -126,6 +126,64 @@ impl<'j, T: IntoJavaObject<'j>> IntoJavaObject<'j> for Option<T> {
126
126
}
127
127
}
128
128
129
+ macro_rules! auto_into_java_object_primitive_array {
130
+ ( $t: ty, $fn_new: ident, $fn_set: ident, $clazz: literal) => {
131
+ impl <' j> IntoJavaObject <' j> for Vec <$t> {
132
+ const CLASS : & ' static str = $clazz;
133
+ fn into_java_object( self , env: & mut jni:: JNIEnv <' j>) -> Result <JObject <' j>, jni:: errors:: Error > {
134
+ let len = self . len( )
135
+ . try_into( )
136
+ . map_err( |_| jni:: errors:: Error :: JniCall ( jni:: errors:: JniError :: InvalidArguments ) ) ?;
137
+ let mut array = env. $fn_new( len) ?;
138
+ env. $fn_set( & mut array, 0 , self . as_slice( ) ) ?;
139
+ Ok ( array. into( ) )
140
+ }
141
+ }
142
+ } ;
143
+ }
144
+
145
+ auto_into_java_object_primitive_array ! ( i8 , new_byte_array, set_byte_array_region, "java/lang/Byte[]" ) ;
146
+ auto_into_java_object_primitive_array ! ( i16 , new_short_array, set_short_array_region, "java/lang/Short[]" ) ;
147
+ auto_into_java_object_primitive_array ! ( i32 , new_int_array, set_int_array_region, "java/lang/Integer[]" ) ;
148
+ auto_into_java_object_primitive_array ! ( i64 , new_long_array, set_long_array_region, "java/lang/Long[]" ) ;
149
+ auto_into_java_object_primitive_array ! ( f32 , new_float_array, set_float_array_region, "java/lang/Float[]" ) ;
150
+ auto_into_java_object_primitive_array ! ( f64 , new_double_array, set_double_array_region, "java/lang/Double[]" ) ;
151
+
152
+ impl < ' j > IntoJavaObject < ' j > for Vec < bool > {
153
+ const CLASS : & ' static str = "java/lang/Boolean[]" ;
154
+
155
+ fn into_java_object ( self , env : & mut jni:: JNIEnv < ' j > ) -> Result < JObject < ' j > , jni:: errors:: Error > {
156
+ let len = self . len ( )
157
+ . try_into ( )
158
+ . map_err ( |_| jni:: errors:: Error :: JniCall ( jni:: errors:: JniError :: InvalidArguments ) ) ?;
159
+ let mut array = env. new_boolean_array ( len) ?;
160
+ let new_self : Vec < u8 > = self . into_iter ( ) . map ( |x| if x { 1 } else { 0 } ) . collect ( ) ;
161
+ env. set_boolean_array_region ( & mut array, 0 , new_self. as_slice ( ) ) ?;
162
+ Ok ( array. into ( ) )
163
+ }
164
+ }
165
+
166
+ impl < ' j > IntoJavaObject < ' j > for Vec < char > {
167
+ const CLASS : & ' static str = "java/lang/Char[]" ;
168
+
169
+ fn into_java_object ( self , env : & mut jni:: JNIEnv < ' j > ) -> Result < JObject < ' j > , jni:: errors:: Error > {
170
+ let len = self . len ( )
171
+ . try_into ( )
172
+ . map_err ( |_| jni:: errors:: Error :: JniCall ( jni:: errors:: JniError :: InvalidArguments ) ) ?;
173
+ let mut array = env. new_char_array ( len) ?;
174
+ let mut new_self : Vec < u16 > = Vec :: new ( ) ;
175
+ for c in self {
176
+ new_self. push (
177
+ c
178
+ . try_into ( )
179
+ . map_err ( |_| jni:: errors:: Error :: JniCall ( jni:: errors:: JniError :: InvalidArguments ) ) ?
180
+ ) ;
181
+ }
182
+ env. set_char_array_region ( & mut array, 0 , new_self. as_slice ( ) ) ?;
183
+ Ok ( array. into ( ) )
184
+ }
185
+ }
186
+
129
187
#[ cfg( feature = "uuid" ) ]
130
188
impl < ' j > IntoJavaObject < ' j > for uuid:: Uuid {
131
189
const CLASS : & ' static str = "java/util/UUID" ;
0 commit comments