1use jni::JNIEnv;
23use jni::objects::{JClass, JString};
24use jni::sys::{jlong, jboolean, jint, jfloat};
25use crate::log::{RiLogger, RiLogConfig, RiLogLevel};
26use crate::fs::RiFileSystem;
27use crate::java::exception::check_not_null;
28
29#[no_mangle]
34pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_new0(
35 _env: JNIEnv,
36 _class: JClass,
37) -> jlong {
38 let config = RiLogConfig::default();
39 let fs = RiFileSystem::new_auto_root().unwrap_or_else(|_| RiFileSystem::new_with_root(std::env::current_dir().unwrap_or_default()));
40 let logger = Box::new(RiLogger::new(&config, fs));
41 Box::into_raw(logger) as jlong
42}
43
44#[no_mangle]
45pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_free0(
46 _env: JNIEnv,
47 _class: JClass,
48 ptr: jlong,
49) {
50 if ptr != 0 {
51 unsafe {
52 let _ = Box::from_raw(ptr as *mut RiLogger);
53 }
54 }
55}
56
57#[no_mangle]
58pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_debug0(
59 mut env: JNIEnv,
60 _class: JClass,
61 ptr: jlong,
62 target: JString,
63 message: JString,
64) {
65 if !check_not_null(&mut env, ptr, "RiLogger") {
66 return;
67 }
68
69 let logger = unsafe { &*(ptr as *const RiLogger) };
70 let target_str: String = match env.get_string(&target) {
71 Ok(s) => s.into(),
72 Err(_) => {
73 crate::java::exception::throw_ri_error(&mut env, "Failed to get target");
74 return;
75 }
76 };
77 let message_str: String = match env.get_string(&message) {
78 Ok(s) => s.into(),
79 Err(_) => {
80 crate::java::exception::throw_ri_error(&mut env, "Failed to get message");
81 return;
82 }
83 };
84
85 let _ = logger.debug(&target_str, &message_str);
86}
87
88#[no_mangle]
89pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_info0(
90 mut env: JNIEnv,
91 _class: JClass,
92 ptr: jlong,
93 target: JString,
94 message: JString,
95) {
96 if !check_not_null(&mut env, ptr, "RiLogger") {
97 return;
98 }
99
100 let logger = unsafe { &*(ptr as *const RiLogger) };
101 let target_str: String = match env.get_string(&target) {
102 Ok(s) => s.into(),
103 Err(_) => {
104 crate::java::exception::throw_ri_error(&mut env, "Failed to get target");
105 return;
106 }
107 };
108 let message_str: String = match env.get_string(&message) {
109 Ok(s) => s.into(),
110 Err(_) => {
111 crate::java::exception::throw_ri_error(&mut env, "Failed to get message");
112 return;
113 }
114 };
115
116 let _ = logger.info(&target_str, &message_str);
117}
118
119#[no_mangle]
120pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_warn0(
121 mut env: JNIEnv,
122 _class: JClass,
123 ptr: jlong,
124 target: JString,
125 message: JString,
126) {
127 if !check_not_null(&mut env, ptr, "RiLogger") {
128 return;
129 }
130
131 let logger = unsafe { &*(ptr as *const RiLogger) };
132 let target_str: String = match env.get_string(&target) {
133 Ok(s) => s.into(),
134 Err(_) => {
135 crate::java::exception::throw_ri_error(&mut env, "Failed to get target");
136 return;
137 }
138 };
139 let message_str: String = match env.get_string(&message) {
140 Ok(s) => s.into(),
141 Err(_) => {
142 crate::java::exception::throw_ri_error(&mut env, "Failed to get message");
143 return;
144 }
145 };
146
147 let _ = logger.warn(&target_str, &message_str);
148}
149
150#[no_mangle]
151pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_error0(
152 mut env: JNIEnv,
153 _class: JClass,
154 ptr: jlong,
155 target: JString,
156 message: JString,
157) {
158 if !check_not_null(&mut env, ptr, "RiLogger") {
159 return;
160 }
161
162 let logger = unsafe { &*(ptr as *const RiLogger) };
163 let target_str: String = match env.get_string(&target) {
164 Ok(s) => s.into(),
165 Err(_) => {
166 crate::java::exception::throw_ri_error(&mut env, "Failed to get target");
167 return;
168 }
169 };
170 let message_str: String = match env.get_string(&message) {
171 Ok(s) => s.into(),
172 Err(_) => {
173 crate::java::exception::throw_ri_error(&mut env, "Failed to get message");
174 return;
175 }
176 };
177
178 let _ = logger.error(&target_str, &message_str);
179}
180
181#[no_mangle]
186pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_new0(
187 _env: JNIEnv,
188 _class: JClass,
189) -> jlong {
190 let config = Box::new(RiLogConfig::default());
191 Box::into_raw(config) as jlong
192}
193
194#[no_mangle]
195pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setLevel0(
196 mut env: JNIEnv,
197 _class: JClass,
198 ptr: jlong,
199 level: jint,
200) {
201 if !check_not_null(&mut env, ptr, "RiLogConfig") {
202 return;
203 }
204
205 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
206 config.level = match level {
207 0 => RiLogLevel::Debug,
208 1 => RiLogLevel::Info,
209 2 => RiLogLevel::Warn,
210 3 => RiLogLevel::Error,
211 _ => RiLogLevel::Info,
212 };
213}
214
215#[no_mangle]
216pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setConsoleEnabled0(
217 mut env: JNIEnv,
218 _class: JClass,
219 ptr: jlong,
220 enabled: jboolean,
221) {
222 if !check_not_null(&mut env, ptr, "RiLogConfig") {
223 return;
224 }
225
226 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
227 config.console_enabled = enabled != 0;
228}
229
230#[no_mangle]
231pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setFileEnabled0(
232 mut env: JNIEnv,
233 _class: JClass,
234 ptr: jlong,
235 enabled: jboolean,
236) {
237 if !check_not_null(&mut env, ptr, "RiLogConfig") {
238 return;
239 }
240
241 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
242 config.file_enabled = enabled != 0;
243}
244
245#[no_mangle]
246pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setSamplingDefault0(
247 mut env: JNIEnv,
248 _class: JClass,
249 ptr: jlong,
250 rate: jfloat,
251) {
252 if !check_not_null(&mut env, ptr, "RiLogConfig") {
253 return;
254 }
255
256 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
257 config.sampling_default = rate.clamp(0.0, 1.0);
258}
259
260#[no_mangle]
261pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setFileName0(
262 mut env: JNIEnv,
263 _class: JClass,
264 ptr: jlong,
265 file_name: JString,
266) {
267 if !check_not_null(&mut env, ptr, "RiLogConfig") {
268 return;
269 }
270
271 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
272 config.file_name = match env.get_string(&file_name) {
273 Ok(s) => s.into(),
274 Err(_) => {
275 crate::java::exception::throw_ri_error(&mut env, "Invalid file_name");
276 return;
277 }
278 };
279}
280
281#[no_mangle]
282pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setJsonFormat0(
283 mut env: JNIEnv,
284 _class: JClass,
285 ptr: jlong,
286 json_format: jboolean,
287) {
288 if !check_not_null(&mut env, ptr, "RiLogConfig") {
289 return;
290 }
291
292 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
293 config.json_format = json_format != 0;
294}
295
296#[no_mangle]
297pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setRotateWhen0(
298 mut env: JNIEnv,
299 _class: JClass,
300 ptr: jlong,
301 rotate_when: JString,
302) {
303 if !check_not_null(&mut env, ptr, "RiLogConfig") {
304 return;
305 }
306
307 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
308 config.rotate_when = match env.get_string(&rotate_when) {
309 Ok(s) => s.into(),
310 Err(_) => {
311 crate::java::exception::throw_ri_error(&mut env, "Invalid rotate_when");
312 return;
313 }
314 };
315}
316
317#[no_mangle]
318pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setMaxBytes0(
319 mut env: JNIEnv,
320 _class: JClass,
321 ptr: jlong,
322 max_bytes: jlong,
323) {
324 if !check_not_null(&mut env, ptr, "RiLogConfig") {
325 return;
326 }
327
328 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
329 config.max_bytes = max_bytes as u64;
330}
331
332#[no_mangle]
333pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setColorBlocks0(
334 mut env: JNIEnv,
335 _class: JClass,
336 ptr: jlong,
337 color_blocks: jboolean,
338) {
339 if !check_not_null(&mut env, ptr, "RiLogConfig") {
340 return;
341 }
342
343 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
344 config.color_blocks = color_blocks != 0;
345}
346
347#[no_mangle]
348pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_free0(
349 _env: JNIEnv,
350 _class: JClass,
351 ptr: jlong,
352) {
353 if ptr != 0 {
354 unsafe {
355 let _ = Box::from_raw(ptr as *mut RiLogConfig);
356 }
357 }
358}