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