1use jni::JNIEnv;
23use jni::objects::{JClass, JString};
24use jni::sys::{jlong, jboolean, jstring, jint};
25use crate::core::{RiAppBuilder, RiAppRuntime, RiError, RiServiceContext, RiHealthStatus, RiHealthCheckResult, RiHealthCheckConfig, RiHealthReport, RiHealthChecker, RiErrorChain, RiLockError, RiLifecycleObserver, RiLogAnalyticsModule, ServiceModule};
26use crate::java::exception::{throw_ri_error, check_not_null};
27use crate::config::RiConfig;
28use std::time::Duration;
29use std::sync::Arc;
30
31#[no_mangle]
36pub extern "system" fn Java_com_dunimd_ri_RiAppBuilder_new0(
37 _env: JNIEnv,
38 _class: JClass,
39) -> jlong {
40 let builder = Box::new(RiAppBuilder::new());
41 Box::into_raw(builder) as jlong
42}
43
44#[no_mangle]
45pub extern "system" fn Java_com_dunimd_ri_RiAppBuilder_withConfig0(
46 mut env: JNIEnv,
47 _class: JClass,
48 ptr: jlong,
49 config_path: JString,
50) -> jlong {
51 if !check_not_null(&mut env, ptr, "RiAppBuilder") {
52 return 0;
53 }
54
55 let builder = unsafe { Box::from_raw(ptr as *mut RiAppBuilder) };
58 let path: String = match env.get_string(&config_path) {
59 Ok(s) => s.into(),
60 Err(e) => {
61 throw_ri_error(&mut env, &format!("Failed to read config path: {e}"));
62 return 0;
63 }
64 };
65
66 match builder.with_config(&path) {
67 Ok(new_builder) => {
68 let boxed = Box::new(new_builder);
69 Box::into_raw(boxed) as jlong
70 }
71 Err(e) => {
72 throw_ri_error(&mut env, &e.to_string());
73 0
74 }
75 }
76}
77
78#[no_mangle]
79pub extern "system" fn Java_com_dunimd_ri_RiAppBuilder_build0(
80 mut env: JNIEnv,
81 _class: JClass,
82 ptr: jlong,
83) -> jlong {
84 if !check_not_null(&mut env, ptr, "RiAppBuilder") {
85 return 0;
86 }
87
88 let builder = unsafe { Box::from_raw(ptr as *mut RiAppBuilder) };
89
90 match builder.build() {
91 Ok(runtime) => {
92 let boxed = Box::new(runtime);
93 Box::into_raw(boxed) as jlong
94 }
95 Err(e) => {
96 throw_ri_error(&mut env, &e.to_string());
97 0
98 }
99 }
100}
101
102#[no_mangle]
103pub extern "system" fn Java_com_dunimd_ri_RiAppBuilder_free0(
104 _env: JNIEnv,
105 _class: JClass,
106 ptr: jlong,
107) {
108 if ptr != 0 {
109 unsafe {
110 let _ = Box::from_raw(ptr as *mut RiAppBuilder);
111 }
112 }
113}
114
115#[no_mangle]
120pub extern "system" fn Java_com_dunimd_ri_RiAppRuntime_free0(
121 _env: JNIEnv,
122 _class: JClass,
123 ptr: jlong,
124) {
125 if ptr != 0 {
126 unsafe {
127 let _ = Box::from_raw(ptr as *mut RiAppRuntime);
128 }
129 }
130}
131
132#[no_mangle]
133pub extern "system" fn Java_com_dunimd_ri_RiAppRuntime_isRunning0(
134 mut env: JNIEnv,
135 _class: JClass,
136 ptr: jlong,
137) -> jboolean {
138 if !check_not_null(&mut env, ptr, "RiAppRuntime") {
139 return 0;
140 }
141
142 let runtime = unsafe { &*(ptr as *const RiAppRuntime) };
143 if runtime.is_running() { 1 } else { 0 }
144}
145
146#[no_mangle]
147pub extern "system" fn Java_com_dunimd_ri_RiAppRuntime_shutdown0(
148 mut env: JNIEnv,
149 _class: JClass,
150 ptr: jlong,
151) {
152 if !check_not_null(&mut env, ptr, "RiAppRuntime") {
153 return;
154 }
155
156 let runtime = unsafe { &mut *(ptr as *mut RiAppRuntime) };
157 crate::java::runtime::block_on_jni(&mut env, "RiAppRuntime::shutdown", runtime.shutdown());
158}
159
160#[no_mangle]
165pub extern "system" fn Java_com_dunimd_ri_RiConfig_new0(
166 _env: JNIEnv,
167 _class: JClass,
168) -> jlong {
169 let config = Box::new(RiConfig::default());
170 Box::into_raw(config) as jlong
171}
172
173#[no_mangle]
174pub extern "system" fn Java_com_dunimd_ri_RiConfig_free0(
175 _env: JNIEnv,
176 _class: JClass,
177 ptr: jlong,
178) {
179 if ptr != 0 {
180 unsafe {
181 let _ = Box::from_raw(ptr as *mut RiConfig);
182 }
183 }
184}
185
186#[no_mangle]
187pub extern "system" fn Java_com_dunimd_ri_RiConfig_fromYaml0(
188 mut env: JNIEnv,
189 _class: JClass,
190 yaml: JString,
191) -> jlong {
192 let yaml_str: String = match env.get_string(&yaml) {
193 Ok(s) => s.into(),
194 Err(e) => {
195 throw_ri_error(&mut env, &format!("Failed to read YAML string: {e}"));
196 return 0;
197 }
198 };
199
200 match RiConfig::from_yaml_str(&yaml_str) {
201 Ok(config) => Box::into_raw(Box::new(config)) as jlong,
202 Err(e) => {
203 throw_ri_error(&mut env, &e.to_string());
204 0
205 }
206 }
207}
208
209#[no_mangle]
210pub extern "system" fn Java_com_dunimd_ri_RiConfig_get0(
211 mut env: JNIEnv,
212 _class: JClass,
213 ptr: jlong,
214 key: JString,
215) -> jstring {
216 if !check_not_null(&mut env, ptr, "RiConfig") {
217 return std::ptr::null_mut();
218 }
219
220 let config = unsafe { &*(ptr as *const RiConfig) };
221 let key_str: String = match env.get_string(&key) {
222 Ok(s) => s.into(),
223 Err(e) => {
224 throw_ri_error(&mut env, &format!("Failed to read key: {e}"));
225 return std::ptr::null_mut();
226 }
227 };
228
229 match config.get(&key_str) {
230 Some(value) => match env.new_string(value) {
231 Ok(s) => s.into_raw(),
232 Err(_) => std::ptr::null_mut(),
233 },
234 None => std::ptr::null_mut(),
235 }
236}
237
238#[no_mangle]
243pub extern "system" fn Java_com_dunimd_ri_RiError_getMessage(
244 mut env: JNIEnv,
245 _class: JClass,
246 ptr: jlong,
247) -> jstring {
248 if !check_not_null(&mut env, ptr, "RiError") {
249 return std::ptr::null_mut();
250 }
251
252 let error = unsafe { &*(ptr as *const RiError) };
253 match env.new_string(error.to_string()) {
254 Ok(s) => s.into_raw(),
255 Err(_) => std::ptr::null_mut(),
256 }
257}
258
259#[no_mangle]
260pub extern "system" fn Java_com_dunimd_ri_RiError_free0(
261 _env: JNIEnv,
262 _class: JClass,
263 ptr: jlong,
264) {
265 if ptr != 0 {
266 unsafe {
267 let _ = Box::from_raw(ptr as *mut RiError);
268 }
269 }
270}
271
272#[no_mangle]
277pub extern "system" fn Java_com_dunimd_ri_RiServiceContext_new0(
278 mut env: JNIEnv,
279 _class: JClass,
280) -> jlong {
281 match RiServiceContext::new_default() {
282 Ok(ctx) => {
283 let boxed = Box::new(ctx);
284 Box::into_raw(boxed) as jlong
285 }
286 Err(e) => {
287 throw_ri_error(&mut env, &e.to_string());
288 0
289 }
290 }
291}
292
293#[no_mangle]
294pub extern "system" fn Java_com_dunimd_ri_RiServiceContext_logger0(
295 mut env: JNIEnv,
296 _class: JClass,
297 ptr: jlong,
298) -> jlong {
299 if !check_not_null(&mut env, ptr, "RiServiceContext") {
300 return 0;
301 }
302
303 let ctx = unsafe { &*(ptr as *const RiServiceContext) };
304 let logger = ctx.logger().clone();
305 let boxed = Box::new(logger);
306 Box::into_raw(boxed) as jlong
307}
308
309#[no_mangle]
310pub extern "system" fn Java_com_dunimd_ri_RiServiceContext_config0(
311 mut env: JNIEnv,
312 _class: JClass,
313 ptr: jlong,
314) -> jlong {
315 if !check_not_null(&mut env, ptr, "RiServiceContext") {
316 return 0;
317 }
318
319 let ctx = unsafe { &*(ptr as *const RiServiceContext) };
320 let config_manager = ctx.config();
321 let config = (*config_manager).config().clone();
322 let boxed = Box::new(config);
323 Box::into_raw(boxed) as jlong
324}
325
326#[no_mangle]
327pub extern "system" fn Java_com_dunimd_ri_RiServiceContext_fs0(
328 mut env: JNIEnv,
329 _class: JClass,
330 ptr: jlong,
331) -> jlong {
332 if !check_not_null(&mut env, ptr, "RiServiceContext") {
333 return 0;
334 }
335
336 let ctx = unsafe { &*(ptr as *const RiServiceContext) };
337 let fs = ctx.fs().clone();
338 let boxed = Box::new(fs);
339 Box::into_raw(boxed) as jlong
340}
341
342#[no_mangle]
343pub extern "system" fn Java_com_dunimd_ri_RiServiceContext_hooks0(
344 mut env: JNIEnv,
345 _class: JClass,
346 ptr: jlong,
347) -> jlong {
348 if !check_not_null(&mut env, ptr, "RiServiceContext") {
349 return 0;
350 }
351
352 let ctx = unsafe { &*(ptr as *const RiServiceContext) };
353 Arc::into_raw(ctx.hooks()) as jlong
356}
357
358#[no_mangle]
359pub extern "system" fn Java_com_dunimd_ri_RiServiceContext_free0(
360 _env: JNIEnv,
361 _class: JClass,
362 ptr: jlong,
363) {
364 if ptr != 0 {
365 unsafe {
366 let _ = Box::from_raw(ptr as *mut RiServiceContext);
367 }
368 }
369}
370
371#[no_mangle]
376pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckResult_new0(
377 mut env: JNIEnv,
378 _class: JClass,
379 name: JString,
380 status: jint,
381 message: JString,
382) -> jlong {
383 let name_str: String = match env.get_string(&name) {
384 Ok(s) => s.into(),
385 Err(e) => {
386 throw_ri_error(&mut env, &format!("Failed to read name: {e}"));
387 return 0;
388 }
389 };
390
391 let health_status = match status {
392 0 => RiHealthStatus::Healthy,
393 1 => RiHealthStatus::Degraded,
394 2 => RiHealthStatus::Unhealthy,
395 _ => RiHealthStatus::Unknown,
396 };
397
398 let message_str: Option<String> = if message.is_null() {
399 None
400 } else {
401 match env.get_string(&message) {
402 Ok(s) => Some(s.into()),
403 Err(e) => {
404 throw_ri_error(&mut env, &format!("Failed to read message: {e}"));
405 return 0;
406 }
407 }
408 };
409
410 let result = RiHealthCheckResult {
411 name: name_str,
412 status: health_status,
413 message: message_str,
414 timestamp: std::time::SystemTime::now(),
415 duration: Duration::ZERO,
416 };
417
418 let boxed = Box::new(result);
419 Box::into_raw(boxed) as jlong
420}
421
422#[no_mangle]
423pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckResult_getName0(
424 mut env: JNIEnv,
425 _class: JClass,
426 ptr: jlong,
427) -> jstring {
428 if !check_not_null(&mut env, ptr, "RiHealthCheckResult") {
429 return std::ptr::null_mut();
430 }
431
432 let result = unsafe { &*(ptr as *const RiHealthCheckResult) };
433 match env.new_string(&result.name) {
434 Ok(s) => s.into_raw(),
435 Err(_) => std::ptr::null_mut(),
436 }
437}
438
439#[no_mangle]
440pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckResult_getStatus0(
441 mut env: JNIEnv,
442 _class: JClass,
443 ptr: jlong,
444) -> jint {
445 if !check_not_null(&mut env, ptr, "RiHealthCheckResult") {
446 return 3;
447 }
448
449 let result = unsafe { &*(ptr as *const RiHealthCheckResult) };
450 match result.status {
451 RiHealthStatus::Healthy => 0,
452 RiHealthStatus::Degraded => 1,
453 RiHealthStatus::Unhealthy => 2,
454 RiHealthStatus::Unknown => 3,
455 }
456}
457
458#[no_mangle]
459pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckResult_getMessage0(
460 mut env: JNIEnv,
461 _class: JClass,
462 ptr: jlong,
463) -> jstring {
464 if !check_not_null(&mut env, ptr, "RiHealthCheckResult") {
465 return std::ptr::null_mut();
466 }
467
468 let result = unsafe { &*(ptr as *const RiHealthCheckResult) };
469 match &result.message {
470 Some(msg) => match env.new_string(msg) {
471 Ok(s) => s.into_raw(),
472 Err(_) => std::ptr::null_mut(),
473 },
474 None => std::ptr::null_mut(),
475 }
476}
477
478#[no_mangle]
479pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckResult_free0(
480 _env: JNIEnv,
481 _class: JClass,
482 ptr: jlong,
483) {
484 if ptr != 0 {
485 unsafe {
486 let _ = Box::from_raw(ptr as *mut RiHealthCheckResult);
487 }
488 }
489}
490
491#[no_mangle]
496pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_new0(
497 _env: JNIEnv,
498 _class: JClass,
499) -> jlong {
500 let config = Box::new(RiHealthCheckConfig::default());
501 Box::into_raw(config) as jlong
502}
503
504#[no_mangle]
505pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_newWithValues0(
506 _env: JNIEnv,
507 _class: JClass,
508 check_interval: jlong,
509 timeout: jlong,
510 failure_threshold: jint,
511 success_threshold: jint,
512 enabled: jboolean,
513) -> jlong {
514 let config = Box::new(RiHealthCheckConfig {
515 check_interval: Duration::from_secs(check_interval as u64),
516 timeout: Duration::from_secs(timeout as u64),
517 failure_threshold: failure_threshold as u32,
518 success_threshold: success_threshold as u32,
519 enabled: enabled != 0,
520 });
521 Box::into_raw(config) as jlong
522}
523
524#[no_mangle]
525pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_getCheckInterval0(
526 mut env: JNIEnv,
527 _class: JClass,
528 ptr: jlong,
529) -> jlong {
530 if !check_not_null(&mut env, ptr, "RiHealthCheckConfig") {
531 return 0;
532 }
533
534 let config = unsafe { &*(ptr as *const RiHealthCheckConfig) };
535 config.check_interval.as_secs() as jlong
536}
537
538#[no_mangle]
539pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_setCheckInterval0(
540 mut env: JNIEnv,
541 _class: JClass,
542 ptr: jlong,
543 value: jlong,
544) {
545 if !check_not_null(&mut env, ptr, "RiHealthCheckConfig") {
546 return;
547 }
548
549 let config = unsafe { &mut *(ptr as *mut RiHealthCheckConfig) };
550 config.check_interval = Duration::from_secs(value as u64);
551}
552
553#[no_mangle]
554pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_getTimeout0(
555 mut env: JNIEnv,
556 _class: JClass,
557 ptr: jlong,
558) -> jlong {
559 if !check_not_null(&mut env, ptr, "RiHealthCheckConfig") {
560 return 0;
561 }
562
563 let config = unsafe { &*(ptr as *const RiHealthCheckConfig) };
564 config.timeout.as_secs() as jlong
565}
566
567#[no_mangle]
568pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_setTimeout0(
569 mut env: JNIEnv,
570 _class: JClass,
571 ptr: jlong,
572 value: jlong,
573) {
574 if !check_not_null(&mut env, ptr, "RiHealthCheckConfig") {
575 return;
576 }
577
578 let config = unsafe { &mut *(ptr as *mut RiHealthCheckConfig) };
579 config.timeout = Duration::from_secs(value as u64);
580}
581
582#[no_mangle]
583pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_getFailureThreshold0(
584 mut env: JNIEnv,
585 _class: JClass,
586 ptr: jlong,
587) -> jint {
588 if !check_not_null(&mut env, ptr, "RiHealthCheckConfig") {
589 return 0;
590 }
591
592 let config = unsafe { &*(ptr as *const RiHealthCheckConfig) };
593 config.failure_threshold as jint
594}
595
596#[no_mangle]
597pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_getSuccessThreshold0(
598 mut env: JNIEnv,
599 _class: JClass,
600 ptr: jlong,
601) -> jint {
602 if !check_not_null(&mut env, ptr, "RiHealthCheckConfig") {
603 return 0;
604 }
605
606 let config = unsafe { &*(ptr as *const RiHealthCheckConfig) };
607 config.success_threshold as jint
608}
609
610#[no_mangle]
611pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_isEnabled0(
612 mut env: JNIEnv,
613 _class: JClass,
614 ptr: jlong,
615) -> jboolean {
616 if !check_not_null(&mut env, ptr, "RiHealthCheckConfig") {
617 return 0;
618 }
619
620 let config = unsafe { &*(ptr as *const RiHealthCheckConfig) };
621 if config.enabled { 1 } else { 0 }
622}
623
624#[no_mangle]
625pub extern "system" fn Java_com_dunimd_ri_RiHealthCheckConfig_free0(
626 _env: JNIEnv,
627 _class: JClass,
628 ptr: jlong,
629) {
630 if ptr != 0 {
631 unsafe {
632 let _ = Box::from_raw(ptr as *mut RiHealthCheckConfig);
633 }
634 }
635}
636
637#[no_mangle]
642pub extern "system" fn Java_com_dunimd_ri_RiHealthReport_new0(
643 _env: JNIEnv,
644 _class: JClass,
645) -> jlong {
646 let report = Box::new(RiHealthReport::new());
647 Box::into_raw(report) as jlong
648}
649
650#[no_mangle]
651pub extern "system" fn Java_com_dunimd_ri_RiHealthReport_getOverallStatus0(
652 mut env: JNIEnv,
653 _class: JClass,
654 ptr: jlong,
655) -> jint {
656 if !check_not_null(&mut env, ptr, "RiHealthReport") {
657 return 3;
658 }
659
660 let report = unsafe { &*(ptr as *const RiHealthReport) };
661 match report.overall_status {
662 RiHealthStatus::Healthy => 0,
663 RiHealthStatus::Degraded => 1,
664 RiHealthStatus::Unhealthy => 2,
665 RiHealthStatus::Unknown => 3,
666 }
667}
668
669#[no_mangle]
670pub extern "system" fn Java_com_dunimd_ri_RiHealthReport_getTotalComponents0(
671 mut env: JNIEnv,
672 _class: JClass,
673 ptr: jlong,
674) -> jint {
675 if !check_not_null(&mut env, ptr, "RiHealthReport") {
676 return 0;
677 }
678
679 let report = unsafe { &*(ptr as *const RiHealthReport) };
680 report.total_components as jint
681}
682
683#[no_mangle]
684pub extern "system" fn Java_com_dunimd_ri_RiHealthReport_getHealthyCount0(
685 mut env: JNIEnv,
686 _class: JClass,
687 ptr: jlong,
688) -> jint {
689 if !check_not_null(&mut env, ptr, "RiHealthReport") {
690 return 0;
691 }
692
693 let report = unsafe { &*(ptr as *const RiHealthReport) };
694 report.healthy_count as jint
695}
696
697#[no_mangle]
698pub extern "system" fn Java_com_dunimd_ri_RiHealthReport_getDegradedCount0(
699 mut env: JNIEnv,
700 _class: JClass,
701 ptr: jlong,
702) -> jint {
703 if !check_not_null(&mut env, ptr, "RiHealthReport") {
704 return 0;
705 }
706
707 let report = unsafe { &*(ptr as *const RiHealthReport) };
708 report.degraded_count as jint
709}
710
711#[no_mangle]
712pub extern "system" fn Java_com_dunimd_ri_RiHealthReport_getUnhealthyCount0(
713 mut env: JNIEnv,
714 _class: JClass,
715 ptr: jlong,
716) -> jint {
717 if !check_not_null(&mut env, ptr, "RiHealthReport") {
718 return 0;
719 }
720
721 let report = unsafe { &*(ptr as *const RiHealthReport) };
722 report.unhealthy_count as jint
723}
724
725#[no_mangle]
726pub extern "system" fn Java_com_dunimd_ri_RiHealthReport_getUnknownCount0(
727 mut env: JNIEnv,
728 _class: JClass,
729 ptr: jlong,
730) -> jint {
731 if !check_not_null(&mut env, ptr, "RiHealthReport") {
732 return 0;
733 }
734
735 let report = unsafe { &*(ptr as *const RiHealthReport) };
736 report.unknown_count as jint
737}
738
739#[no_mangle]
740pub extern "system" fn Java_com_dunimd_ri_RiHealthReport_free0(
741 _env: JNIEnv,
742 _class: JClass,
743 ptr: jlong,
744) {
745 if ptr != 0 {
746 unsafe {
747 let _ = Box::from_raw(ptr as *mut RiHealthReport);
748 }
749 }
750}
751
752#[no_mangle]
757pub extern "system" fn Java_com_dunimd_ri_RiHealthChecker_new0(
758 _env: JNIEnv,
759 _class: JClass,
760) -> jlong {
761 let checker = Box::new(RiHealthChecker::new());
762 Box::into_raw(checker) as jlong
763}
764
765#[no_mangle]
766pub extern "system" fn Java_com_dunimd_ri_RiHealthChecker_withConfig0(
767 mut env: JNIEnv,
768 _class: JClass,
769 config_ptr: jlong,
770) -> jlong {
771 if !check_not_null(&mut env, config_ptr, "RiHealthCheckConfig") {
772 return 0;
773 }
774
775 let config = unsafe { &*(config_ptr as *const RiHealthCheckConfig) };
776 let checker = Box::new(RiHealthChecker::with_config(config.clone()));
777 Box::into_raw(checker) as jlong
778}
779
780#[no_mangle]
781pub extern "system" fn Java_com_dunimd_ri_RiHealthChecker_getCheckCount0(
782 mut env: JNIEnv,
783 _class: JClass,
784 ptr: jlong,
785) -> jint {
786 if !check_not_null(&mut env, ptr, "RiHealthChecker") {
787 return 0;
788 }
789
790 let checker = unsafe { &*(ptr as *const RiHealthChecker) };
791 checker.check_count() as jint
792}
793
794#[no_mangle]
795pub extern "system" fn Java_com_dunimd_ri_RiHealthChecker_free0(
796 _env: JNIEnv,
797 _class: JClass,
798 ptr: jlong,
799) {
800 if ptr != 0 {
801 unsafe {
802 let _ = Box::from_raw(ptr as *mut RiHealthChecker);
803 }
804 }
805}
806
807#[no_mangle]
812pub extern "system" fn Java_com_dunimd_ri_RiErrorChain_new0(
813 mut env: JNIEnv,
814 _class: JClass,
815 message: JString,
816) -> jlong {
817 let msg: String = match env.get_string(&message) {
818 Ok(s) => s.into(),
819 Err(e) => {
820 throw_ri_error(&mut env, &format!("Failed to read message: {e}"));
821 return 0;
822 }
823 };
824
825 let error = std::io::Error::other(msg);
826 let chain = Box::new(RiErrorChain::new(error));
827 Box::into_raw(chain) as jlong
828}
829
830#[no_mangle]
831pub extern "system" fn Java_com_dunimd_ri_RiErrorChain_withContext0(
832 mut env: JNIEnv,
833 _class: JClass,
834 message: JString,
835 context: JString,
836) -> jlong {
837 let msg: String = match env.get_string(&message) {
838 Ok(s) => s.into(),
839 Err(e) => {
840 throw_ri_error(&mut env, &format!("Failed to read message: {e}"));
841 return 0;
842 }
843 };
844 let ctx: String = match env.get_string(&context) {
845 Ok(s) => s.into(),
846 Err(e) => {
847 throw_ri_error(&mut env, &format!("Failed to read context: {e}"));
848 return 0;
849 }
850 };
851
852 let error = std::io::Error::other(msg);
853 let chain = Box::new(RiErrorChain::with_context(error, ctx));
854 Box::into_raw(chain) as jlong
855}
856
857#[no_mangle]
858pub extern "system" fn Java_com_dunimd_ri_RiErrorChain_getContext0(
859 mut env: JNIEnv,
860 _class: JClass,
861 ptr: jlong,
862) -> jstring {
863 if !check_not_null(&mut env, ptr, "RiErrorChain") {
864 return std::ptr::null_mut();
865 }
866
867 let chain = unsafe { &*(ptr as *const RiErrorChain) };
868 match env.new_string(chain.get_context()) {
869 Ok(s) => s.into_raw(),
870 Err(_) => std::ptr::null_mut(),
871 }
872}
873
874#[no_mangle]
875pub extern "system" fn Java_com_dunimd_ri_RiErrorChain_getSourceError0(
876 mut env: JNIEnv,
877 _class: JClass,
878 ptr: jlong,
879) -> jstring {
880 if !check_not_null(&mut env, ptr, "RiErrorChain") {
881 return std::ptr::null_mut();
882 }
883
884 let chain = unsafe { &*(ptr as *const RiErrorChain) };
885 match env.new_string(chain.source_error().to_string()) {
886 Ok(s) => s.into_raw(),
887 Err(_) => std::ptr::null_mut(),
888 }
889}
890
891#[no_mangle]
892pub extern "system" fn Java_com_dunimd_ri_RiErrorChain_prettyFormat0(
893 mut env: JNIEnv,
894 _class: JClass,
895 ptr: jlong,
896) -> jstring {
897 if !check_not_null(&mut env, ptr, "RiErrorChain") {
898 return std::ptr::null_mut();
899 }
900
901 let chain = unsafe { &*(ptr as *const RiErrorChain) };
902 match env.new_string(chain.pretty_format()) {
903 Ok(s) => s.into_raw(),
904 Err(_) => std::ptr::null_mut(),
905 }
906}
907
908#[no_mangle]
909pub extern "system" fn Java_com_dunimd_ri_RiErrorChain_free0(
910 _env: JNIEnv,
911 _class: JClass,
912 ptr: jlong,
913) {
914 if ptr != 0 {
915 unsafe {
916 let _ = Box::from_raw(ptr as *mut RiErrorChain);
917 }
918 }
919}
920
921#[no_mangle]
926pub extern "system" fn Java_com_dunimd_ri_RiErrorContext_new0(
927 _env: JNIEnv,
928 _class: JClass,
929) -> jlong {
930 0
931}
932
933#[no_mangle]
934pub extern "system" fn Java_com_dunimd_ri_RiErrorContext_chainFromMsg0(
935 mut env: JNIEnv,
936 _class: JClass,
937 message: JString,
938) -> jlong {
939 let msg: String = match env.get_string(&message) {
940 Ok(s) => s.into(),
941 Err(e) => {
942 throw_ri_error(&mut env, &format!("Failed to read message: {e}"));
943 return 0;
944 }
945 };
946
947 let error = std::io::Error::other(msg);
948 let chain = Box::new(RiErrorChain::new(error));
949 Box::into_raw(chain) as jlong
950}
951
952#[no_mangle]
953pub extern "system" fn Java_com_dunimd_ri_RiErrorContext_free0(
954 _env: JNIEnv,
955 _class: JClass,
956 _ptr: jlong,
957) {
958}
959
960#[no_mangle]
965pub extern "system" fn Java_com_dunimd_ri_RiLockError_new0(
966 mut env: JNIEnv,
967 _class: JClass,
968 context: JString,
969) -> jlong {
970 let ctx: String = match env.get_string(&context) {
971 Ok(s) => s.into(),
972 Err(e) => {
973 throw_ri_error(&mut env, &format!("Failed to read context: {e}"));
974 return 0;
975 }
976 };
977
978 let error = Box::new(RiLockError::new(&ctx));
979 Box::into_raw(error) as jlong
980}
981
982#[no_mangle]
983pub extern "system" fn Java_com_dunimd_ri_RiLockError_newWithPoisoned0(
984 mut env: JNIEnv,
985 _class: JClass,
986 context: JString,
987 is_poisoned: jboolean,
988) -> jlong {
989 let ctx: String = match env.get_string(&context) {
990 Ok(s) => s.into(),
991 Err(e) => {
992 throw_ri_error(&mut env, &format!("Failed to read context: {e}"));
993 return 0;
994 }
995 };
996
997 let error = if is_poisoned != 0 {
998 Box::new(RiLockError::poisoned(&ctx))
999 } else {
1000 Box::new(RiLockError::new(&ctx))
1001 };
1002 Box::into_raw(error) as jlong
1003}
1004
1005#[no_mangle]
1006pub extern "system" fn Java_com_dunimd_ri_RiLockError_poisoned0(
1007 mut env: JNIEnv,
1008 _class: JClass,
1009 context: JString,
1010) -> jlong {
1011 let ctx: String = match env.get_string(&context) {
1012 Ok(s) => s.into(),
1013 Err(e) => {
1014 throw_ri_error(&mut env, &format!("Failed to read context: {e}"));
1015 return 0;
1016 }
1017 };
1018
1019 let error = Box::new(RiLockError::poisoned(&ctx));
1020 Box::into_raw(error) as jlong
1021}
1022
1023#[no_mangle]
1024pub extern "system" fn Java_com_dunimd_ri_RiLockError_getContext0(
1025 mut env: JNIEnv,
1026 _class: JClass,
1027 ptr: jlong,
1028) -> jstring {
1029 if !check_not_null(&mut env, ptr, "RiLockError") {
1030 return std::ptr::null_mut();
1031 }
1032
1033 let error = unsafe { &*(ptr as *const RiLockError) };
1034 match env.new_string(error.get_context()) {
1035 Ok(s) => s.into_raw(),
1036 Err(_) => std::ptr::null_mut(),
1037 }
1038}
1039
1040#[no_mangle]
1041pub extern "system" fn Java_com_dunimd_ri_RiLockError_isPoisoned0(
1042 mut env: JNIEnv,
1043 _class: JClass,
1044 ptr: jlong,
1045) -> jboolean {
1046 if !check_not_null(&mut env, ptr, "RiLockError") {
1047 return 0;
1048 }
1049
1050 let error = unsafe { &*(ptr as *const RiLockError) };
1051 if error.is_poisoned() { 1 } else { 0 }
1052}
1053
1054#[no_mangle]
1055pub extern "system" fn Java_com_dunimd_ri_RiLockError_getMessage0(
1056 mut env: JNIEnv,
1057 _class: JClass,
1058 ptr: jlong,
1059) -> jstring {
1060 if !check_not_null(&mut env, ptr, "RiLockError") {
1061 return std::ptr::null_mut();
1062 }
1063
1064 let error = unsafe { &*(ptr as *const RiLockError) };
1065 match env.new_string(error.to_string()) {
1066 Ok(s) => s.into_raw(),
1067 Err(_) => std::ptr::null_mut(),
1068 }
1069}
1070
1071#[no_mangle]
1072pub extern "system" fn Java_com_dunimd_ri_RiLockError_free0(
1073 _env: JNIEnv,
1074 _class: JClass,
1075 ptr: jlong,
1076) {
1077 if ptr != 0 {
1078 unsafe {
1079 let _ = Box::from_raw(ptr as *mut RiLockError);
1080 }
1081 }
1082}
1083
1084#[no_mangle]
1089pub extern "system" fn Java_com_dunimd_ri_RiLifecycleObserver_new0(
1090 _env: JNIEnv,
1091 _class: JClass,
1092) -> jlong {
1093 let observer = Box::new(RiLifecycleObserver::new());
1094 Box::into_raw(observer) as jlong
1095}
1096
1097#[no_mangle]
1098pub extern "system" fn Java_com_dunimd_ri_RiLifecycleObserver_getName0(
1099 mut env: JNIEnv,
1100 _class: JClass,
1101 ptr: jlong,
1102) -> jstring {
1103 if !check_not_null(&mut env, ptr, "RiLifecycleObserver") {
1104 return std::ptr::null_mut();
1105 }
1106
1107 let observer = unsafe { &*(ptr as *const RiLifecycleObserver) };
1108 match env.new_string(observer.name()) {
1109 Ok(s) => s.into_raw(),
1110 Err(_) => std::ptr::null_mut(),
1111 }
1112}
1113
1114#[no_mangle]
1115pub extern "system" fn Java_com_dunimd_ri_RiLifecycleObserver_isCritical0(
1116 mut env: JNIEnv,
1117 _class: JClass,
1118 ptr: jlong,
1119) -> jboolean {
1120 if !check_not_null(&mut env, ptr, "RiLifecycleObserver") {
1121 return 0;
1122 }
1123
1124 let observer = unsafe { &*(ptr as *const RiLifecycleObserver) };
1125 if observer.is_critical() { 1 } else { 0 }
1126}
1127
1128#[no_mangle]
1129pub extern "system" fn Java_com_dunimd_ri_RiLifecycleObserver_free0(
1130 _env: JNIEnv,
1131 _class: JClass,
1132 ptr: jlong,
1133) {
1134 if ptr != 0 {
1135 unsafe {
1136 let _ = Box::from_raw(ptr as *mut RiLifecycleObserver);
1137 }
1138 }
1139}
1140
1141#[no_mangle]
1146pub extern "system" fn Java_com_dunimd_ri_RiLogAnalyticsModule_new0(
1147 _env: JNIEnv,
1148 _class: JClass,
1149) -> jlong {
1150 let module = Box::new(RiLogAnalyticsModule::new());
1151 Box::into_raw(module) as jlong
1152}
1153
1154#[no_mangle]
1155pub extern "system" fn Java_com_dunimd_ri_RiLogAnalyticsModule_getName0(
1156 mut env: JNIEnv,
1157 _class: JClass,
1158 ptr: jlong,
1159) -> jstring {
1160 if !check_not_null(&mut env, ptr, "RiLogAnalyticsModule") {
1161 return std::ptr::null_mut();
1162 }
1163
1164 let module = unsafe { &*(ptr as *const RiLogAnalyticsModule) };
1165 match env.new_string(module.name()) {
1166 Ok(s) => s.into_raw(),
1167 Err(_) => std::ptr::null_mut(),
1168 }
1169}
1170
1171#[no_mangle]
1172pub extern "system" fn Java_com_dunimd_ri_RiLogAnalyticsModule_isCritical0(
1173 mut env: JNIEnv,
1174 _class: JClass,
1175 ptr: jlong,
1176) -> jboolean {
1177 if !check_not_null(&mut env, ptr, "RiLogAnalyticsModule") {
1178 return 0;
1179 }
1180
1181 let module = unsafe { &*(ptr as *const RiLogAnalyticsModule) };
1182 if module.is_critical() { 1 } else { 0 }
1183}
1184
1185#[no_mangle]
1186pub extern "system" fn Java_com_dunimd_ri_RiLogAnalyticsModule_isEnabled0(
1187 mut env: JNIEnv,
1188 _class: JClass,
1189 ptr: jlong,
1190) -> jboolean {
1191 if !check_not_null(&mut env, ptr, "RiLogAnalyticsModule") {
1192 return 0;
1193 }
1194
1195 let module = unsafe { &*(ptr as *const RiLogAnalyticsModule) };
1196 if module.is_enabled() { 1 } else { 0 }
1197}
1198
1199#[no_mangle]
1200pub extern "system" fn Java_com_dunimd_ri_RiLogAnalyticsModule_free0(
1201 _env: JNIEnv,
1202 _class: JClass,
1203 ptr: jlong,
1204) {
1205 if ptr != 0 {
1206 unsafe {
1207 let _ = Box::from_raw(ptr as *mut RiLogAnalyticsModule);
1208 }
1209 }
1210}