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 = env.get_string(&target)
71 .expect("Failed to get target")
72 .into();
73 let message_str: String = env.get_string(&message)
74 .expect("Failed to get message")
75 .into();
76
77 let _ = logger.debug(&target_str, &message_str);
78}
79
80#[no_mangle]
81pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_info0(
82 mut env: JNIEnv,
83 _class: JClass,
84 ptr: jlong,
85 target: JString,
86 message: JString,
87) {
88 if !check_not_null(&mut env, ptr, "RiLogger") {
89 return;
90 }
91
92 let logger = unsafe { &*(ptr as *const RiLogger) };
93 let target_str: String = env.get_string(&target)
94 .expect("Failed to get target")
95 .into();
96 let message_str: String = env.get_string(&message)
97 .expect("Failed to get message")
98 .into();
99
100 let _ = logger.info(&target_str, &message_str);
101}
102
103#[no_mangle]
104pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_warn0(
105 mut env: JNIEnv,
106 _class: JClass,
107 ptr: jlong,
108 target: JString,
109 message: JString,
110) {
111 if !check_not_null(&mut env, ptr, "RiLogger") {
112 return;
113 }
114
115 let logger = unsafe { &*(ptr as *const RiLogger) };
116 let target_str: String = env.get_string(&target)
117 .expect("Failed to get target")
118 .into();
119 let message_str: String = env.get_string(&message)
120 .expect("Failed to get message")
121 .into();
122
123 let _ = logger.warn(&target_str, &message_str);
124}
125
126#[no_mangle]
127pub extern "system" fn Java_com_dunimd_ri_log_RiLogger_error0(
128 mut env: JNIEnv,
129 _class: JClass,
130 ptr: jlong,
131 target: JString,
132 message: JString,
133) {
134 if !check_not_null(&mut env, ptr, "RiLogger") {
135 return;
136 }
137
138 let logger = unsafe { &*(ptr as *const RiLogger) };
139 let target_str: String = env.get_string(&target)
140 .expect("Failed to get target")
141 .into();
142 let message_str: String = env.get_string(&message)
143 .expect("Failed to get message")
144 .into();
145
146 let _ = logger.error(&target_str, &message_str);
147}
148
149#[no_mangle]
154pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_new0(
155 _env: JNIEnv,
156 _class: JClass,
157) -> jlong {
158 let config = Box::new(RiLogConfig::default());
159 Box::into_raw(config) as jlong
160}
161
162#[no_mangle]
163pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setLevel0(
164 mut env: JNIEnv,
165 _class: JClass,
166 ptr: jlong,
167 level: jint,
168) {
169 if !check_not_null(&mut env, ptr, "RiLogConfig") {
170 return;
171 }
172
173 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
174 config.level = match level {
175 0 => RiLogLevel::Debug,
176 1 => RiLogLevel::Info,
177 2 => RiLogLevel::Warn,
178 3 => RiLogLevel::Error,
179 _ => RiLogLevel::Info,
180 };
181}
182
183#[no_mangle]
184pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setConsoleEnabled0(
185 mut env: JNIEnv,
186 _class: JClass,
187 ptr: jlong,
188 enabled: jboolean,
189) {
190 if !check_not_null(&mut env, ptr, "RiLogConfig") {
191 return;
192 }
193
194 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
195 config.console_enabled = enabled != 0;
196}
197
198#[no_mangle]
199pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setFileEnabled0(
200 mut env: JNIEnv,
201 _class: JClass,
202 ptr: jlong,
203 enabled: jboolean,
204) {
205 if !check_not_null(&mut env, ptr, "RiLogConfig") {
206 return;
207 }
208
209 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
210 config.file_enabled = enabled != 0;
211}
212
213#[no_mangle]
214pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setSamplingDefault0(
215 mut env: JNIEnv,
216 _class: JClass,
217 ptr: jlong,
218 rate: jfloat,
219) {
220 if !check_not_null(&mut env, ptr, "RiLogConfig") {
221 return;
222 }
223
224 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
225 config.sampling_default = rate.clamp(0.0, 1.0);
226}
227
228#[no_mangle]
229pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setFileName0(
230 mut env: JNIEnv,
231 _class: JClass,
232 ptr: jlong,
233 file_name: JString,
234) {
235 if !check_not_null(&mut env, ptr, "RiLogConfig") {
236 return;
237 }
238
239 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
240 config.file_name = env.get_string(&file_name)
241 .expect("Failed to get file name")
242 .into();
243}
244
245#[no_mangle]
246pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setJsonFormat0(
247 mut env: JNIEnv,
248 _class: JClass,
249 ptr: jlong,
250 json_format: jboolean,
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.json_format = json_format != 0;
258}
259
260#[no_mangle]
261pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setRotateWhen0(
262 mut env: JNIEnv,
263 _class: JClass,
264 ptr: jlong,
265 rotate_when: 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.rotate_when = env.get_string(&rotate_when)
273 .expect("Failed to get rotate_when")
274 .into();
275}
276
277#[no_mangle]
278pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setMaxBytes0(
279 mut env: JNIEnv,
280 _class: JClass,
281 ptr: jlong,
282 max_bytes: jlong,
283) {
284 if !check_not_null(&mut env, ptr, "RiLogConfig") {
285 return;
286 }
287
288 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
289 config.max_bytes = max_bytes as u64;
290}
291
292#[no_mangle]
293pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_setColorBlocks0(
294 mut env: JNIEnv,
295 _class: JClass,
296 ptr: jlong,
297 color_blocks: jboolean,
298) {
299 if !check_not_null(&mut env, ptr, "RiLogConfig") {
300 return;
301 }
302
303 let config = unsafe { &mut *(ptr as *mut RiLogConfig) };
304 config.color_blocks = color_blocks != 0;
305}
306
307#[no_mangle]
308pub extern "system" fn Java_com_dunimd_ri_log_RiLogConfig_free0(
309 _env: JNIEnv,
310 _class: JClass,
311 ptr: jlong,
312) {
313 if ptr != 0 {
314 unsafe {
315 let _ = Box::from_raw(ptr as *mut RiLogConfig);
316 }
317 }
318}