1use jni::JNIEnv;
23use jni::objects::{JClass, JString, JByteArray, JObject};
24use jni::sys::{jlong, jboolean, jint, jstring, jdouble, jbyteArray, jobjectArray};
25use crate::queue::{RiQueueModule, RiQueueConfig, RiQueueManager, RiQueueMessage, RiQueueStats, RiRetryPolicy, RiDeadLetterConfig};
26use crate::java::exception::check_not_null;
27
28#[no_mangle]
33pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueModule_new0(
34 mut env: JNIEnv,
35 _class: JClass,
36 config_ptr: jlong,
37) -> jlong {
38 if !check_not_null(&mut env, config_ptr, "RiQueueConfig") {
39 return 0;
40 }
41
42 let config = unsafe { &*(config_ptr as *const RiQueueConfig) };
43 let result = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
44 RiQueueModule::new(config.clone()).await
45 });
46
47 match result {
48 Some(Ok(module)) => {
49 let boxed = Box::new(module);
50 Box::into_raw(boxed) as jlong
51 }
52 _ => 0,
53 }
54}
55
56#[no_mangle]
57pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueModule_free0(
58 _env: JNIEnv,
59 _class: JClass,
60 ptr: jlong,
61) {
62 if ptr != 0 {
63 unsafe {
64 let _ = Box::from_raw(ptr as *mut RiQueueModule);
65 }
66 }
67}
68
69#[no_mangle]
74pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueConfig_new0(
75 _env: JNIEnv,
76 _class: JClass,
77) -> jlong {
78 let config = Box::new(RiQueueConfig::default());
79 Box::into_raw(config) as jlong
80}
81
82#[no_mangle]
83pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueConfig_setEnabled0(
84 mut env: JNIEnv,
85 _class: JClass,
86 ptr: jlong,
87 enabled: jboolean,
88) {
89 if !check_not_null(&mut env, ptr, "RiQueueConfig") {
90 return;
91 }
92
93 let config = unsafe { &mut *(ptr as *mut RiQueueConfig) };
94 config.enabled = enabled != 0;
95}
96
97#[no_mangle]
98pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueConfig_setBackendType0(
99 mut env: JNIEnv,
100 _class: JClass,
101 ptr: jlong,
102 backend_type: jint,
103) {
104 if !check_not_null(&mut env, ptr, "RiQueueConfig") {
105 return;
106 }
107
108 use crate::queue::RiQueueBackendType;
109 let config = unsafe { &mut *(ptr as *mut RiQueueConfig) };
110 config.backend_type = match backend_type {
111 0 => RiQueueBackendType::Memory,
112 1 => RiQueueBackendType::RabbitMQ,
113 2 => RiQueueBackendType::Kafka,
114 3 => RiQueueBackendType::Redis,
115 _ => RiQueueBackendType::Memory,
116 };
117}
118
119#[no_mangle]
120pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueConfig_setConnectionString0(
121 mut env: JNIEnv,
122 _class: JClass,
123 ptr: jlong,
124 connection_string: JString,
125) {
126 if !check_not_null(&mut env, ptr, "RiQueueConfig") {
127 return;
128 }
129
130 let config = unsafe { &mut *(ptr as *mut RiQueueConfig) };
131 config.connection_string = match env.get_string(&connection_string) {
132 Ok(s) => s.into(),
133 Err(_) => {
134 crate::java::exception::throw_ri_error(&mut env, "Invalid connection string");
135 return;
136 }
137 };
138}
139
140#[no_mangle]
141pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueConfig_free0(
142 _env: JNIEnv,
143 _class: JClass,
144 ptr: jlong,
145) {
146 if ptr != 0 {
147 unsafe {
148 let _ = Box::from_raw(ptr as *mut RiQueueConfig);
149 }
150 }
151}
152
153#[no_mangle]
158pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_new0(
159 _env: JNIEnv,
160 _class: JClass,
161) -> jlong {
162 let manager = Box::new(RiQueueManager::default());
163 Box::into_raw(manager) as jlong
164}
165
166#[no_mangle]
167pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_init0(
168 mut env: JNIEnv,
169 _class: JClass,
170 ptr: jlong,
171) {
172 if !check_not_null(&mut env, ptr, "RiQueueManager") {
173 return;
174 }
175
176 let manager = unsafe { &*(ptr as *const RiQueueManager) };
177 let _ = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
178 manager.init().await
179 });
180}
181
182#[no_mangle]
183pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_createQueue0(
184 mut env: JNIEnv,
185 _class: JClass,
186 ptr: jlong,
187 name: JString,
188) -> jstring {
189 if !check_not_null(&mut env, ptr, "RiQueueManager") {
190 return std::ptr::null_mut();
191 }
192
193 let manager = unsafe { &*(ptr as *const RiQueueManager) };
194 let name_str: String = match env.get_string(&name) {
195 Ok(s) => s.into(),
196 Err(_) => {
197 crate::java::exception::throw_ri_error(&mut env, "Failed to get queue name");
198 return std::ptr::null_mut();
199 }
200 };
201
202 let result = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
203 manager.create_queue(&name_str).await
204 });
205
206 match result {
207 Some(Ok(_)) => match env.new_string(&name_str) {
208 Ok(s) => s.into_raw(),
209 Err(_) => std::ptr::null_mut(),
210 },
211 _ => std::ptr::null_mut(),
212 }
213}
214
215#[no_mangle]
216pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_queueExists0(
217 mut env: JNIEnv,
218 _class: JClass,
219 ptr: jlong,
220 name: JString,
221) -> jboolean {
222 if !check_not_null(&mut env, ptr, "RiQueueManager") {
223 return 0;
224 }
225
226 let manager = unsafe { &*(ptr as *const RiQueueManager) };
227 let name_str: String = match env.get_string(&name) {
228 Ok(s) => s.into(),
229 Err(_) => {
230 crate::java::exception::throw_ri_error(&mut env, "Failed to get queue name");
231 return 0;
232 }
233 };
234
235 let exists = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
236 manager.get_queue(&name_str).await.is_some()
237 })
238 .unwrap_or(false);
239
240 if exists { 1 } else { 0 }
241}
242
243#[no_mangle]
244pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_listQueues0(
245 mut env: JNIEnv,
246 _class: JClass,
247 ptr: jlong,
248) -> jobjectArray {
249 if !check_not_null(&mut env, ptr, "RiQueueManager") {
250 return std::ptr::null_mut();
251 }
252
253 let manager = unsafe { &*(ptr as *const RiQueueManager) };
254
255 let queues = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
256 manager.list_queues().await
257 })
258 .unwrap_or_default();
259
260 let string_class = match env.find_class("java/lang/String") {
261 Ok(c) => c,
262 Err(_) => return std::ptr::null_mut(),
263 };
264
265 let array = match env.new_object_array(queues.len() as i32, &string_class, JObject::null()) {
266 Ok(a) => a,
267 Err(_) => return std::ptr::null_mut(),
268 };
269
270 for (i, queue_name) in queues.iter().enumerate() {
271 let jstr = match env.new_string(queue_name) {
272 Ok(s) => s,
273 Err(_) => continue,
274 };
275 let _ = env.set_object_array_element(&array, i as i32, jstr);
276 }
277
278 array.into_raw()
279}
280
281#[no_mangle]
282pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_deleteQueue0(
283 mut env: JNIEnv,
284 _class: JClass,
285 ptr: jlong,
286 name: JString,
287) -> jboolean {
288 if !check_not_null(&mut env, ptr, "RiQueueManager") {
289 return 0;
290 }
291
292 let manager = unsafe { &*(ptr as *const RiQueueManager) };
293 let name_str: String = match env.get_string(&name) {
294 Ok(s) => s.into(),
295 Err(_) => {
296 crate::java::exception::throw_ri_error(&mut env, "Failed to get queue name");
297 return 0;
298 }
299 };
300
301 let result = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
302 manager.delete_queue(&name_str).await
303 });
304
305 match result {
306 Some(Ok(_)) => 1,
307 _ => 0,
308 }
309}
310
311#[no_mangle]
312pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_publish0(
313 mut env: JNIEnv,
314 _class: JClass,
315 ptr: jlong,
316 queue_name: JString,
317 message: JByteArray,
318) {
319 if !check_not_null(&mut env, ptr, "RiQueueManager") {
320 return;
321 }
322
323 let manager = unsafe { &*(ptr as *const RiQueueManager) };
324 let queue_name_str: String = match env.get_string(&queue_name) {
325 Ok(s) => s.into(),
326 Err(_) => {
327 crate::java::exception::throw_ri_error(&mut env, "Failed to get queue name");
328 return;
329 }
330 };
331
332 let payload: Vec<u8> = env.convert_byte_array(message)
333 .unwrap_or_default();
334
335 let _ = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
336 if let Some(queue) = manager.get_queue(&queue_name_str).await {
337 let producer = queue.create_producer().await;
338 if let Ok(producer) = producer {
339 let msg = RiQueueMessage::new(payload);
340 let _ = producer.send(msg).await;
341 }
342 }
343 });
344}
345
346#[no_mangle]
347pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_consume0(
348 mut env: JNIEnv,
349 _class: JClass,
350 ptr: jlong,
351 queue_name: JString,
352) -> jlong {
353 if !check_not_null(&mut env, ptr, "RiQueueManager") {
354 return 0;
355 }
356
357 let manager = unsafe { &*(ptr as *const RiQueueManager) };
358 let queue_name_str: String = match env.get_string(&queue_name) {
359 Ok(s) => s.into(),
360 Err(_) => {
361 crate::java::exception::throw_ri_error(&mut env, "Failed to get queue name");
362 return 0;
363 }
364 };
365
366 let result = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
367 if let Some(queue) = manager.get_queue(&queue_name_str).await {
368 let consumer = queue.create_consumer("default").await;
369 if let Ok(consumer) = consumer {
370 return consumer.receive().await;
371 }
372 }
373 Ok(None)
374 });
375
376 match result {
377 Some(Ok(Some(msg))) => {
378 let boxed = Box::new(msg);
379 Box::into_raw(boxed) as jlong
380 }
381 _ => 0,
382 }
383}
384
385#[no_mangle]
386pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_stats0(
387 mut env: JNIEnv,
388 _class: JClass,
389 ptr: jlong,
390 queue_name: JString,
391) -> jlong {
392 if !check_not_null(&mut env, ptr, "RiQueueManager") {
393 return 0;
394 }
395
396 let manager = unsafe { &*(ptr as *const RiQueueManager) };
397 let queue_name_str: String = match env.get_string(&queue_name) {
398 Ok(s) => s.into(),
399 Err(_) => {
400 crate::java::exception::throw_ri_error(&mut env, "Failed to get queue name");
401 return 0;
402 }
403 };
404
405 let result = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
406 if let Some(queue) = manager.get_queue(&queue_name_str).await {
407 queue.get_stats().await.ok()
408 } else {
409 None
410 }
411 });
412
413 match result {
414 Some(stats) => {
415 let boxed = Box::new(stats);
416 Box::into_raw(boxed) as jlong
417 }
418 None => 0,
419 }
420}
421
422#[no_mangle]
423pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_shutdown0(
424 mut env: JNIEnv,
425 _class: JClass,
426 ptr: jlong,
427) {
428 if !check_not_null(&mut env, ptr, "RiQueueManager") {
429 return;
430 }
431
432 let manager = unsafe { &*(ptr as *const RiQueueManager) };
433
434 let _ = crate::java::runtime::block_on_local(&mut env, "RiQueue", async {
435 manager.shutdown().await
436 });
437}
438
439#[no_mangle]
440pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueManager_free0(
441 _env: JNIEnv,
442 _class: JClass,
443 ptr: jlong,
444) {
445 if ptr != 0 {
446 unsafe {
447 let _ = Box::from_raw(ptr as *mut RiQueueManager);
448 }
449 }
450}
451
452#[no_mangle]
457pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_new0(
458 env: JNIEnv,
459 _class: JClass,
460 payload: JByteArray,
461) -> jlong {
462 let payload_vec: Vec<u8> = env.convert_byte_array(payload)
463 .unwrap_or_default();
464
465 let message = Box::new(RiQueueMessage::new(payload_vec));
466 Box::into_raw(message) as jlong
467}
468
469#[no_mangle]
470pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_getId0(
471 mut env: JNIEnv,
472 _class: JClass,
473 ptr: jlong,
474) -> jstring {
475 if !check_not_null(&mut env, ptr, "RiQueueMessage") {
476 return std::ptr::null_mut();
477 }
478
479 let message = unsafe { &*(ptr as *const RiQueueMessage) };
480 match env.new_string(&message.id) {
481 Ok(s) => s.into_raw(),
482 Err(_) => std::ptr::null_mut(),
483 }
484}
485
486#[no_mangle]
487pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_getPayload0(
488 mut env: JNIEnv,
489 _class: JClass,
490 ptr: jlong,
491) -> jbyteArray {
492 if !check_not_null(&mut env, ptr, "RiQueueMessage") {
493 return std::ptr::null_mut();
494 }
495
496 let message = unsafe { &*(ptr as *const RiQueueMessage) };
497 let byte_array = env.new_byte_array(message.payload.len() as i32);
498
499 if let Ok(array) = byte_array {
500 let _ = env.set_byte_array_region(&array, 0, &message.payload.iter().map(|b| *b as i8).collect::<Vec<_>>());
501 return array.into_raw();
502 }
503
504 std::ptr::null_mut()
505}
506
507#[no_mangle]
508pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_getPayloadString0(
509 mut env: JNIEnv,
510 _class: JClass,
511 ptr: jlong,
512) -> jstring {
513 if !check_not_null(&mut env, ptr, "RiQueueMessage") {
514 return std::ptr::null_mut();
515 }
516
517 let message = unsafe { &*(ptr as *const RiQueueMessage) };
518 let payload_str = String::from_utf8_lossy(&message.payload);
519 match env.new_string(&payload_str) {
520 Ok(s) => s.into_raw(),
521 Err(_) => std::ptr::null_mut(),
522 }
523}
524
525#[no_mangle]
526pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_getRetryCount0(
527 mut env: JNIEnv,
528 _class: JClass,
529 ptr: jlong,
530) -> jint {
531 if !check_not_null(&mut env, ptr, "RiQueueMessage") {
532 return 0;
533 }
534
535 let message = unsafe { &*(ptr as *const RiQueueMessage) };
536 message.retry_count as jint
537}
538
539#[no_mangle]
540pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_getMaxRetries0(
541 mut env: JNIEnv,
542 _class: JClass,
543 ptr: jlong,
544) -> jint {
545 if !check_not_null(&mut env, ptr, "RiQueueMessage") {
546 return 0;
547 }
548
549 let message = unsafe { &*(ptr as *const RiQueueMessage) };
550 message.max_retries as jint
551}
552
553#[no_mangle]
554pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_setMaxRetries0(
555 mut env: JNIEnv,
556 _class: JClass,
557 ptr: jlong,
558 max_retries: jint,
559) {
560 if !check_not_null(&mut env, ptr, "RiQueueMessage") {
561 return;
562 }
563
564 let message = unsafe { &mut *(ptr as *mut RiQueueMessage) };
565 message.max_retries = max_retries as u32;
566}
567
568#[no_mangle]
569pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_canRetry0(
570 mut env: JNIEnv,
571 _class: JClass,
572 ptr: jlong,
573) -> jboolean {
574 if !check_not_null(&mut env, ptr, "RiQueueMessage") {
575 return 0;
576 }
577
578 let message = unsafe { &*(ptr as *const RiQueueMessage) };
579 if message.can_retry() { 1 } else { 0 }
580}
581
582#[no_mangle]
583pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueMessage_free0(
584 _env: JNIEnv,
585 _class: JClass,
586 ptr: jlong,
587) {
588 if ptr != 0 {
589 unsafe {
590 let _ = Box::from_raw(ptr as *mut RiQueueMessage);
591 }
592 }
593}
594
595#[no_mangle]
600pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getQueueName0(
601 mut env: JNIEnv,
602 _class: JClass,
603 ptr: jlong,
604) -> jstring {
605 if !check_not_null(&mut env, ptr, "RiQueueStats") {
606 return std::ptr::null_mut();
607 }
608
609 let stats = unsafe { &*(ptr as *const RiQueueStats) };
610 match env.new_string(&stats.queue_name) {
611 Ok(s) => s.into_raw(),
612 Err(_) => std::ptr::null_mut(),
613 }
614}
615
616#[no_mangle]
617pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getMessageCount0(
618 mut env: JNIEnv,
619 _class: JClass,
620 ptr: jlong,
621) -> jlong {
622 if !check_not_null(&mut env, ptr, "RiQueueStats") {
623 return 0;
624 }
625
626 let stats = unsafe { &*(ptr as *const RiQueueStats) };
627 stats.message_count as jlong
628}
629
630#[no_mangle]
631pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getConsumerCount0(
632 mut env: JNIEnv,
633 _class: JClass,
634 ptr: jlong,
635) -> jint {
636 if !check_not_null(&mut env, ptr, "RiQueueStats") {
637 return 0;
638 }
639
640 let stats = unsafe { &*(ptr as *const RiQueueStats) };
641 stats.consumer_count as jint
642}
643
644#[no_mangle]
645pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getProducerCount0(
646 mut env: JNIEnv,
647 _class: JClass,
648 ptr: jlong,
649) -> jint {
650 if !check_not_null(&mut env, ptr, "RiQueueStats") {
651 return 0;
652 }
653
654 let stats = unsafe { &*(ptr as *const RiQueueStats) };
655 stats.producer_count as jint
656}
657
658#[no_mangle]
659pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getProcessedMessages0(
660 mut env: JNIEnv,
661 _class: JClass,
662 ptr: jlong,
663) -> jlong {
664 if !check_not_null(&mut env, ptr, "RiQueueStats") {
665 return 0;
666 }
667
668 let stats = unsafe { &*(ptr as *const RiQueueStats) };
669 stats.processed_messages as jlong
670}
671
672#[no_mangle]
673pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getFailedMessages0(
674 mut env: JNIEnv,
675 _class: JClass,
676 ptr: jlong,
677) -> jlong {
678 if !check_not_null(&mut env, ptr, "RiQueueStats") {
679 return 0;
680 }
681
682 let stats = unsafe { &*(ptr as *const RiQueueStats) };
683 stats.failed_messages as jlong
684}
685
686#[no_mangle]
687pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getAvgProcessingTimeMs0(
688 mut env: JNIEnv,
689 _class: JClass,
690 ptr: jlong,
691) -> jdouble {
692 if !check_not_null(&mut env, ptr, "RiQueueStats") {
693 return 0.0;
694 }
695
696 let stats = unsafe { &*(ptr as *const RiQueueStats) };
697 stats.avg_processing_time_ms
698}
699
700#[no_mangle]
701pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getTotalBytesSent0(
702 mut env: JNIEnv,
703 _class: JClass,
704 ptr: jlong,
705) -> jlong {
706 if !check_not_null(&mut env, ptr, "RiQueueStats") {
707 return 0;
708 }
709
710 let stats = unsafe { &*(ptr as *const RiQueueStats) };
711 stats.total_bytes_sent as jlong
712}
713
714#[no_mangle]
715pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_getTotalBytesReceived0(
716 mut env: JNIEnv,
717 _class: JClass,
718 ptr: jlong,
719) -> jlong {
720 if !check_not_null(&mut env, ptr, "RiQueueStats") {
721 return 0;
722 }
723
724 let stats = unsafe { &*(ptr as *const RiQueueStats) };
725 stats.total_bytes_received as jlong
726}
727
728#[no_mangle]
729pub extern "system" fn Java_com_dunimd_ri_queue_RiQueueStats_free0(
730 _env: JNIEnv,
731 _class: JClass,
732 ptr: jlong,
733) {
734 if ptr != 0 {
735 unsafe {
736 let _ = Box::from_raw(ptr as *mut RiQueueStats);
737 }
738 }
739}
740
741#[no_mangle]
746pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_new0(
747 _env: JNIEnv,
748 _class: JClass,
749) -> jlong {
750 let policy = Box::new(RiRetryPolicy::default());
751 Box::into_raw(policy) as jlong
752}
753
754#[no_mangle]
755pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_setMaxRetries0(
756 mut env: JNIEnv,
757 _class: JClass,
758 ptr: jlong,
759 max_retries: jint,
760) {
761 if !check_not_null(&mut env, ptr, "RiRetryPolicy") {
762 return;
763 }
764
765 let policy = unsafe { &mut *(ptr as *mut RiRetryPolicy) };
766 policy.max_retries = max_retries as u32;
767}
768
769#[no_mangle]
770pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_getMaxRetries0(
771 mut env: JNIEnv,
772 _class: JClass,
773 ptr: jlong,
774) -> jint {
775 if !check_not_null(&mut env, ptr, "RiRetryPolicy") {
776 return 0;
777 }
778
779 let policy = unsafe { &*(ptr as *const RiRetryPolicy) };
780 policy.max_retries as jint
781}
782
783#[no_mangle]
784pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_setInitialDelayMs0(
785 mut env: JNIEnv,
786 _class: JClass,
787 ptr: jlong,
788 initial_delay_ms: jlong,
789) {
790 if !check_not_null(&mut env, ptr, "RiRetryPolicy") {
791 return;
792 }
793
794 let policy = unsafe { &mut *(ptr as *mut RiRetryPolicy) };
795 policy.initial_delay_ms = initial_delay_ms as u64;
796}
797
798#[no_mangle]
799pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_getInitialDelayMs0(
800 mut env: JNIEnv,
801 _class: JClass,
802 ptr: jlong,
803) -> jlong {
804 if !check_not_null(&mut env, ptr, "RiRetryPolicy") {
805 return 0;
806 }
807
808 let policy = unsafe { &*(ptr as *const RiRetryPolicy) };
809 policy.initial_delay_ms as jlong
810}
811
812#[no_mangle]
813pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_setMaxDelayMs0(
814 mut env: JNIEnv,
815 _class: JClass,
816 ptr: jlong,
817 max_delay_ms: jlong,
818) {
819 if !check_not_null(&mut env, ptr, "RiRetryPolicy") {
820 return;
821 }
822
823 let policy = unsafe { &mut *(ptr as *mut RiRetryPolicy) };
824 policy.max_delay_ms = max_delay_ms as u64;
825}
826
827#[no_mangle]
828pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_getMaxDelayMs0(
829 mut env: JNIEnv,
830 _class: JClass,
831 ptr: jlong,
832) -> jlong {
833 if !check_not_null(&mut env, ptr, "RiRetryPolicy") {
834 return 0;
835 }
836
837 let policy = unsafe { &*(ptr as *const RiRetryPolicy) };
838 policy.max_delay_ms as jlong
839}
840
841#[no_mangle]
842pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_setBackoffMultiplier0(
843 mut env: JNIEnv,
844 _class: JClass,
845 ptr: jlong,
846 backoff_multiplier: jdouble,
847) {
848 if !check_not_null(&mut env, ptr, "RiRetryPolicy") {
849 return;
850 }
851
852 let policy = unsafe { &mut *(ptr as *mut RiRetryPolicy) };
853 policy.backoff_multiplier = backoff_multiplier;
854}
855
856#[no_mangle]
857pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_getBackoffMultiplier0(
858 mut env: JNIEnv,
859 _class: JClass,
860 ptr: jlong,
861) -> jdouble {
862 if !check_not_null(&mut env, ptr, "RiRetryPolicy") {
863 return 0.0;
864 }
865
866 let policy = unsafe { &*(ptr as *const RiRetryPolicy) };
867 policy.backoff_multiplier
868}
869
870#[no_mangle]
871pub extern "system" fn Java_com_dunimd_ri_queue_RiRetryPolicy_free0(
872 _env: JNIEnv,
873 _class: JClass,
874 ptr: jlong,
875) {
876 if ptr != 0 {
877 unsafe {
878 let _ = Box::from_raw(ptr as *mut RiRetryPolicy);
879 }
880 }
881}
882
883#[no_mangle]
888pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_new0(
889 _env: JNIEnv,
890 _class: JClass,
891) -> jlong {
892 let config = Box::new(RiDeadLetterConfig::default());
893 Box::into_raw(config) as jlong
894}
895
896#[no_mangle]
897pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_setEnabled0(
898 mut env: JNIEnv,
899 _class: JClass,
900 ptr: jlong,
901 enabled: jboolean,
902) {
903 if !check_not_null(&mut env, ptr, "RiDeadLetterConfig") {
904 return;
905 }
906
907 let config = unsafe { &mut *(ptr as *mut RiDeadLetterConfig) };
908 config.enabled = enabled != 0;
909}
910
911#[no_mangle]
912pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_isEnabled0(
913 mut env: JNIEnv,
914 _class: JClass,
915 ptr: jlong,
916) -> jboolean {
917 if !check_not_null(&mut env, ptr, "RiDeadLetterConfig") {
918 return 0;
919 }
920
921 let config = unsafe { &*(ptr as *const RiDeadLetterConfig) };
922 if config.enabled { 1 } else { 0 }
923}
924
925#[no_mangle]
926pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_setMaxRetryCount0(
927 mut env: JNIEnv,
928 _class: JClass,
929 ptr: jlong,
930 max_retry_count: jint,
931) {
932 if !check_not_null(&mut env, ptr, "RiDeadLetterConfig") {
933 return;
934 }
935
936 let config = unsafe { &mut *(ptr as *mut RiDeadLetterConfig) };
937 config.max_retry_count = max_retry_count as u32;
938}
939
940#[no_mangle]
941pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_getMaxRetryCount0(
942 mut env: JNIEnv,
943 _class: JClass,
944 ptr: jlong,
945) -> jint {
946 if !check_not_null(&mut env, ptr, "RiDeadLetterConfig") {
947 return 0;
948 }
949
950 let config = unsafe { &*(ptr as *const RiDeadLetterConfig) };
951 config.max_retry_count as jint
952}
953
954#[no_mangle]
955pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_setDeadLetterQueueName0(
956 mut env: JNIEnv,
957 _class: JClass,
958 ptr: jlong,
959 name: JString,
960) {
961 if !check_not_null(&mut env, ptr, "RiDeadLetterConfig") {
962 return;
963 }
964
965 let config = unsafe { &mut *(ptr as *mut RiDeadLetterConfig) };
966 config.dead_letter_queue_name = match env.get_string(&name) {
967 Ok(s) => s.into(),
968 Err(_) => {
969 crate::java::exception::throw_ri_error(&mut env, "Invalid queue name");
970 return;
971 }
972 };
973}
974
975#[no_mangle]
976pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_getDeadLetterQueueName0(
977 mut env: JNIEnv,
978 _class: JClass,
979 ptr: jlong,
980) -> jstring {
981 if !check_not_null(&mut env, ptr, "RiDeadLetterConfig") {
982 return std::ptr::null_mut();
983 }
984
985 let config = unsafe { &*(ptr as *const RiDeadLetterConfig) };
986 match env.new_string(&config.dead_letter_queue_name) {
987 Ok(s) => s.into_raw(),
988 Err(_) => std::ptr::null_mut(),
989 }
990}
991
992#[no_mangle]
993pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_setTtlHours0(
994 mut env: JNIEnv,
995 _class: JClass,
996 ptr: jlong,
997 ttl_hours: jint,
998) {
999 if !check_not_null(&mut env, ptr, "RiDeadLetterConfig") {
1000 return;
1001 }
1002
1003 let config = unsafe { &mut *(ptr as *mut RiDeadLetterConfig) };
1004 config.ttl_hours = ttl_hours as u32;
1005}
1006
1007#[no_mangle]
1008pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_getTtlHours0(
1009 mut env: JNIEnv,
1010 _class: JClass,
1011 ptr: jlong,
1012) -> jint {
1013 if !check_not_null(&mut env, ptr, "RiDeadLetterConfig") {
1014 return 0;
1015 }
1016
1017 let config = unsafe { &*(ptr as *const RiDeadLetterConfig) };
1018 config.ttl_hours as jint
1019}
1020
1021#[no_mangle]
1022pub extern "system" fn Java_com_dunimd_ri_queue_RiDeadLetterConfig_free0(
1023 _env: JNIEnv,
1024 _class: JClass,
1025 ptr: jlong,
1026) {
1027 if ptr != 0 {
1028 unsafe {
1029 let _ = Box::from_raw(ptr as *mut RiDeadLetterConfig);
1030 }
1031 }
1032}