Skip to content

Commit 81ebc74

Browse files
committed
restored ro access to env
1 parent 6e7ac06 commit 81ebc74

10 files changed

Lines changed: 34 additions & 18 deletions

File tree

zenoh-flat/src/jni_converter.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,13 @@ pub use crate::jni_type_binding::TypeBinding;
5151
/// Strategy for converting a JNI parameter into a Rust value.
5252
#[derive(Clone)]
5353
pub enum ArgDecode {
54-
/// `let <name> = <path>(&mut env, &<input>)?;`
54+
/// `let <name> = <path>(&mut env, &<input>)?;` — for decoders that need
55+
/// mutable access to the JNI environment (e.g. `JNIEnv::get_string`).
5556
EnvRefMut(syn::Path),
57+
/// `let <name> = <path>(&env, &<input>)?;` — for decoders that only
58+
/// need shared access to the JNI environment (e.g. byte-array readers
59+
/// whose `JNIEnv` methods take `&self`).
60+
EnvRef(syn::Path),
5661
/// `let <name> = <path>(<input>)?;` — pure conversion (e.g. enum decoders).
5762
Pure(syn::Path),
5863
/// `let <name> = <expr>;` — inline transformation built from the input
@@ -80,6 +85,13 @@ impl ArgDecode {
8085
syn::parse_str(path.as_ref()).expect("invalid ArgDecode::env_ref_mut path"),
8186
)
8287
}
88+
89+
/// `ArgDecode::EnvRef` from a path string.
90+
pub fn env_ref(path: impl AsRef<str>) -> Self {
91+
ArgDecode::EnvRef(
92+
syn::parse_str(path.as_ref()).expect("invalid ArgDecode::env_ref path"),
93+
)
94+
}
8395
}
8496

8597
impl ReturnEncode {
@@ -1185,6 +1197,9 @@ impl JniMethodsConverter {
11851197
ArgDecode::EnvRefMut(path) => {
11861198
prelude.push(quote! { let #name = #path(&mut env, &#pat)?; });
11871199
}
1200+
ArgDecode::EnvRef(path) => {
1201+
prelude.push(quote! { let #name = #path(&env, &#pat)?; });
1202+
}
11881203
ArgDecode::Pure(path) => {
11891204
prelude.push(quote! { let #name = #path(#pat)?; });
11901205
}
@@ -1226,6 +1241,7 @@ impl JniMethodsConverter {
12261241
fn decode_expr(&self, decode: &ArgDecode, input: &syn::Ident) -> TokenStream {
12271242
match decode {
12281243
ArgDecode::EnvRefMut(path) => quote! { #path(&mut env, &#input)? },
1244+
ArgDecode::EnvRef(path) => quote! { #path(&env, &#input)? },
12291245
ArgDecode::Pure(path) => quote! { #path(#input)? },
12301246
ArgDecode::Inline(f) => f.call(input),
12311247
ArgDecode::OwnedRef => {

zenoh-jni/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ fn shared_bindings() -> JniTypeBinding {
3737
TypeBinding::new("VecU8").consume(JniForm::new(
3838
"jni::objects::JByteArray",
3939
"ByteArray",
40-
ArgDecode::env_ref_mut("crate::utils::decode_byte_array"),
40+
ArgDecode::env_ref("crate::utils::decode_byte_array"),
4141
)),
4242
)
4343
.type_binding(jobject_consume(

zenoh-jni/src/ext/advanced_publisher.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,12 @@ pub unsafe extern "C" fn Java_io_zenoh_jni_JNIAdvancedPublisher_putViaJNI(
267267
) {
268268
let publisher = OwnedObject::from_raw(publisher_ptr);
269269
let _ = || -> ZResult<()> {
270-
let payload = decode_byte_array(&mut env, &payload)?;
270+
let payload = decode_byte_array(&env, &payload)?;
271271
let mut publication = publisher.put(payload);
272272
let encoding = decode_jni_encoding(&mut env, &encoding)?;
273273
publication = publication.encoding(encoding);
274274
if !attachment.is_null() {
275-
let attachment = decode_byte_array(&mut env, &attachment)?;
275+
let attachment = decode_byte_array(&env, &attachment)?;
276276
publication = publication.attachment::<Vec<u8>>(attachment)
277277
};
278278
publication.wait().map_err(|err| zerror!(err))
@@ -306,7 +306,7 @@ pub unsafe extern "C" fn Java_io_zenoh_jni_JNIAdvancedPublisher_deleteViaJNI(
306306
let _ = || -> ZResult<()> {
307307
let mut delete = publisher.delete();
308308
if !attachment.is_null() {
309-
let attachment = decode_byte_array(&mut env, &attachment)?;
309+
let attachment = decode_byte_array(&env, &attachment)?;
310310
delete = delete.attachment::<Vec<u8>>(attachment)
311311
};
312312
delete.wait().map_err(|err| zerror!(err))

zenoh-jni/src/publisher.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ pub unsafe extern "C" fn Java_io_zenoh_jni_JNIPublisher_putViaJNI(
5656
) {
5757
let publisher = OwnedObject::from_raw(publisher_ptr);
5858
let _ = || -> ZResult<()> {
59-
let payload = decode_byte_array(&mut env, &payload)?;
59+
let payload = decode_byte_array(&env, &payload)?;
6060
let mut publication = publisher.put(payload);
6161
let encoding = decode_jni_encoding(&mut env, &encoding)?;
6262
publication = publication.encoding(encoding);
6363
if !attachment.is_null() {
64-
let attachment = decode_byte_array(&mut env, &attachment)?;
64+
let attachment = decode_byte_array(&env, &attachment)?;
6565
publication = publication.attachment::<Vec<u8>>(attachment)
6666
};
6767
publication.wait().map_err(|err| zerror!(err))
@@ -95,7 +95,7 @@ pub unsafe extern "C" fn Java_io_zenoh_jni_JNIPublisher_deleteViaJNI(
9595
let _ = || -> ZResult<()> {
9696
let mut delete = publisher.delete();
9797
if !attachment.is_null() {
98-
let attachment = decode_byte_array(&mut env, &attachment)?;
98+
let attachment = decode_byte_array(&env, &attachment)?;
9999
delete = delete.attachment::<Vec<u8>>(attachment)
100100
};
101101
delete.wait().map_err(|err| zerror!(err))

zenoh-jni/src/querier.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ pub unsafe extern "C" fn Java_io_zenoh_jni_JNIQuerier_getViaJNI(
103103
let encoding = decode_jni_encoding(&mut env, &encoding)?;
104104
get_builder = get_builder.encoding(encoding);
105105
}
106-
get_builder = get_builder.payload(decode_byte_array(&mut env, &payload)?);
106+
get_builder = get_builder.payload(decode_byte_array(&env, &payload)?);
107107
}
108108

109109
if !attachment.is_null() {
110-
let attachment = decode_byte_array(&mut env, &attachment)?;
110+
let attachment = decode_byte_array(&env, &attachment)?;
111111
get_builder = get_builder.attachment::<Vec<u8>>(attachment);
112112
}
113113

zenoh-jni/src/query.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ pub(crate) unsafe extern "C" fn Java_io_zenoh_jni_JNIQuery_replySuccessViaJNI(
7070
let _ = || -> ZResult<()> {
7171
let query = Arc::from_raw(query_ptr);
7272
let key_expr = decode_jni_key_expr(&mut env, &key_expr)?;
73-
let payload = decode_byte_array(&mut env, &payload)?;
73+
let payload = decode_byte_array(&env, &payload)?;
7474
let mut reply_builder = query.reply(key_expr, payload);
7575
let encoding = decode_jni_encoding(&mut env, &encoding)?;
7676
reply_builder = reply_builder.encoding(encoding);
@@ -79,7 +79,7 @@ pub(crate) unsafe extern "C" fn Java_io_zenoh_jni_JNIQuery_replySuccessViaJNI(
7979
reply_builder = reply_builder.timestamp(ts)
8080
}
8181
if !attachment.is_null() {
82-
reply_builder = reply_builder.attachment(decode_byte_array(&mut env, &attachment)?);
82+
reply_builder = reply_builder.attachment(decode_byte_array(&env, &attachment)?);
8383
}
8484
reply_builder = reply_builder.express(qos_express != 0);
8585
reply_builder.wait().map_err(|err| zerror!(err))
@@ -117,7 +117,7 @@ pub(crate) unsafe extern "C" fn Java_io_zenoh_jni_JNIQuery_replyErrorViaJNI(
117117
let query = Arc::from_raw(query_ptr);
118118
let encoding = decode_jni_encoding(&mut env, &encoding)?;
119119
query
120-
.reply_err(decode_byte_array(&mut env, &payload)?)
120+
.reply_err(decode_byte_array(&env, &payload)?)
121121
.encoding(encoding)
122122
.wait()
123123
.map_err(|err| zerror!(err))
@@ -168,7 +168,7 @@ pub(crate) unsafe extern "C" fn Java_io_zenoh_jni_JNIQuery_replyDeleteViaJNI(
168168
reply_builder = reply_builder.timestamp(ts)
169169
}
170170
if !attachment.is_null() {
171-
reply_builder = reply_builder.attachment(decode_byte_array(&mut env, &attachment)?);
171+
reply_builder = reply_builder.attachment(decode_byte_array(&env, &attachment)?);
172172
}
173173
reply_builder = reply_builder.express(qos_express != 0);
174174
reply_builder.wait().map_err(|err| zerror!(err))

zenoh-jni/src/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ pub(crate) fn get_callback_global_ref(
8282
}
8383

8484
/// Helper function to convert a JByteArray into a Vec<u8>.
85-
pub(crate) fn decode_byte_array(env: &mut JNIEnv, payload: &JByteArray) -> ZResult<Vec<u8>> {
85+
pub(crate) fn decode_byte_array(env: &JNIEnv, payload: &JByteArray) -> ZResult<Vec<u8>> {
8686
let payload_len = env
8787
.get_array_length(payload)
8888
.map(|length| length as usize)

zenoh-jni/src/zbytes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ pub extern "C" fn Java_io_zenoh_jni_JNIZBytes_deserializeViaJNI(
291291
jtype: JObject,
292292
) -> jobject {
293293
|| -> ZResult<jobject> {
294-
let decoded_bytes: Vec<u8> = decode_byte_array(&mut env, &bytes)?;
294+
let decoded_bytes: Vec<u8> = decode_byte_array(&env, &bytes)?;
295295
let zbytes = ZBytes::from(decoded_bytes);
296296
let mut deserializer = ZDeserializer::new(&zbytes);
297297
let jtype = decode_token_type(&mut env, jtype)?;

zenoh-jni/src/zbytes_kotlin.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ pub extern "C" fn Java_io_zenoh_jni_JNIZBytesKotlin_deserializeViaJNI(
366366
ktype: JObject,
367367
) -> jobject {
368368
|| -> ZResult<jobject> {
369-
let raw = decode_byte_array(&mut env, &bytes)?;
369+
let raw = decode_byte_array(&env, &bytes)?;
370370
let zbytes = ZBytes::from(raw);
371371
let mut deserializer = ZDeserializer::new(&zbytes);
372372
let kotlin_type = decode_ktype(&mut env, ktype)?;

zenoh-jni/src/zenoh_id.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ pub extern "C" fn Java_io_zenoh_jni_JNIZenohId_toStringViaJNI(
5151
zenoh_id: JByteArray,
5252
) -> jstring {
5353
|| -> ZResult<JString> {
54-
let bytes = decode_byte_array(&mut env, &zenoh_id)?;
54+
let bytes = decode_byte_array(&env, &zenoh_id)?;
5555
let zenohid = ZenohId::try_from(bytes.as_slice()).map_err(|err| zerror!(err))?;
5656
env.new_string(zenohid.to_string())
5757
.map_err(|err| zerror!(err))

0 commit comments

Comments
 (0)