Open David-Petrov opened 8 months ago
@David-Petrov, it works in #50 version. I actually don't understand why it doesn't work in the master version, a lot of changes were made, but you suggestions aren't true.
UPD: It's because TryFromJavaValue::Source
and TryIntoJavaValue::Target
were primitive jbyteArray
, alias for jobject
, not wrapped JObject
, and this type must be infallibly convertible into JValue
and fallibly - from JValueWrapper
:
<T as TryFromJavaValue<'env, 'borrow>>::Source: TryFrom<JValueWrapper<'env>, Error = JniError>,
JValue<'env>: From<<T as TryIntoJavaValue<'env>>::Target>,
Note, that type for byte[]
was changed from Box<[u8]>
to Box<[i8]>
to be consistent with byte -> i8
conversion, see the issue in the jni-rs repo.
Now I see it can be inconvenient when working with String <-> byte[]
on the Java side and str <-> &[u8]
on the Rust side, but that's it, bytes are unsigned in rust and signed in java.
whats the status on this currently? I cant seem to figure out what to do
I'm trying to map a Java class having a
byte[]
field to a struct in rust in the way described in the README.md, but I stumble upon a weird issue with error types somewhere in the underlying trait derivations.For the simplest possible reproduction:
String
toBox<[u8]>
.the trait bound
*mut _jobject: From<JValueWrapper<'_>>
is not satisfied required forJValueWrapper<'_>
to implementInto<*mut _jobject>
required for*mut _jobject
to implementTryFrom<JValueWrapper<'_>>
field.rs(55, 53): required by a bound in
Field::<'env, 'borrow, T>::field_try_from
the trait boundJObject<'_>: From<*mut _jobject>
is not satisfied the following other types implement traitFrom<T>
: <JObject<'a> as From<JThrowable<'a>>> <JObject<'a> as From<JClass<'a>>> <JObject<'a> as From<JString<'a>>> <JObject<'a> as From<JMap<'a, 'b>>> <JObject<'a> as From<JList<'a, 'b>>> <JObject<'a> as From<JByteBuffer<'a>>> <JObject<'a> as From<&'a GlobalRef>> <JObject<'a> as From<&'a AutoLocal<'a, '_>>> required for*mut _jobject
to implementInto<JObject<'_>>
required forJValue<'_>
to implementFrom<*mut _jobject>