1use jni::JNIEnv;
23use jni::objects::{JClass, JString};
24use jni::sys::{jlong, jboolean, jint, jstring};
25use crate::cache::{DMSCCacheModule, DMSCCacheConfig, DMSCCacheBackendType, DMSCCacheStats};
26use crate::java::exception::check_not_null;
27
28#[no_mangle]
33pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheModule_new0(
34 mut env: JNIEnv,
35 _class: JClass,
36 config_ptr: jlong,
37) -> jlong {
38 if !check_not_null(&mut env, config_ptr, "DMSCCacheConfig") {
39 return 0;
40 }
41
42 let config = unsafe { &*(config_ptr as *const DMSCCacheConfig) };
43 let module = Box::new(DMSCCacheModule::new(config.clone()));
44 Box::into_raw(module) as jlong
45}
46
47#[no_mangle]
48pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheModule_set(
49 mut env: JNIEnv,
50 _class: JClass,
51 ptr: jlong,
52 key: JString,
53 value: JString,
54 _ttl_secs: jlong,
55) {
56 if !check_not_null(&mut env, ptr, "DMSCCacheModule") {
57 return;
58 }
59
60 let _module = unsafe { &*(ptr as *const DMSCCacheModule) };
61 let _key_str: String = env.get_string(&key)
62 .expect("Failed to get key")
63 .into();
64 let _value_str: String = env.get_string(&value)
65 .expect("Failed to get value")
66 .into();
67}
68
69#[no_mangle]
70pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheModule_get(
71 mut env: JNIEnv,
72 _class: JClass,
73 ptr: jlong,
74 key: JString,
75) -> jstring {
76 if !check_not_null(&mut env, ptr, "DMSCCacheModule") {
77 return std::ptr::null_mut();
78 }
79
80 let _module = unsafe { &*(ptr as *const DMSCCacheModule) };
81 let _key_str: String = env.get_string(&key)
82 .expect("Failed to get key")
83 .into();
84
85 std::ptr::null_mut()
86}
87
88#[no_mangle]
89pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheModule_delete(
90 mut env: JNIEnv,
91 _class: JClass,
92 ptr: jlong,
93 key: JString,
94) {
95 if !check_not_null(&mut env, ptr, "DMSCCacheModule") {
96 return;
97 }
98
99 let _module = unsafe { &*(ptr as *const DMSCCacheModule) };
100 let _key_str: String = env.get_string(&key)
101 .expect("Failed to get key")
102 .into();
103}
104
105#[no_mangle]
106pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheModule_exists(
107 mut env: JNIEnv,
108 _class: JClass,
109 ptr: jlong,
110 key: JString,
111) -> jboolean {
112 if !check_not_null(&mut env, ptr, "DMSCCacheModule") {
113 return 0;
114 }
115
116 let _module = unsafe { &*(ptr as *const DMSCCacheModule) };
117 let _key_str: String = env.get_string(&key)
118 .expect("Failed to get key")
119 .into();
120
121 0
122}
123
124#[no_mangle]
125pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheModule_getStats(
126 mut env: JNIEnv,
127 _class: JClass,
128 ptr: jlong,
129) -> jlong {
130 if !check_not_null(&mut env, ptr, "DMSCCacheModule") {
131 return 0;
132 }
133
134 let _module = unsafe { &*(ptr as *const DMSCCacheModule) };
135
136 let stats = Box::new(DMSCCacheStats::default());
137 Box::into_raw(stats) as jlong
138}
139
140#[no_mangle]
141pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheModule_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 DMSCCacheModule);
149 }
150 }
151}
152
153#[no_mangle]
158pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheConfig_new0(
159 _env: JNIEnv,
160 _class: JClass,
161) -> jlong {
162 let config = Box::new(DMSCCacheConfig::default());
163 Box::into_raw(config) as jlong
164}
165
166#[no_mangle]
167pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheConfig_setEnabled(
168 mut env: JNIEnv,
169 _class: JClass,
170 ptr: jlong,
171 enabled: jboolean,
172) {
173 if !check_not_null(&mut env, ptr, "DMSCCacheConfig") {
174 return;
175 }
176
177 let config = unsafe { &mut *(ptr as *mut DMSCCacheConfig) };
178 config.enabled = enabled != 0;
179}
180
181#[no_mangle]
182pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheConfig_setDefaultTtlSecs(
183 mut env: JNIEnv,
184 _class: JClass,
185 ptr: jlong,
186 ttl: jlong,
187) {
188 if !check_not_null(&mut env, ptr, "DMSCCacheConfig") {
189 return;
190 }
191
192 let config = unsafe { &mut *(ptr as *mut DMSCCacheConfig) };
193 config.default_ttl_secs = ttl as u64;
194}
195
196#[no_mangle]
197pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheConfig_setBackendType(
198 mut env: JNIEnv,
199 _class: JClass,
200 ptr: jlong,
201 backend_type: jint,
202) {
203 if !check_not_null(&mut env, ptr, "DMSCCacheConfig") {
204 return;
205 }
206
207 let config = unsafe { &mut *(ptr as *mut DMSCCacheConfig) };
208 config.backend_type = match backend_type {
209 0 => DMSCCacheBackendType::Memory,
210 1 => DMSCCacheBackendType::Redis,
211 2 => DMSCCacheBackendType::Hybrid,
212 _ => DMSCCacheBackendType::Memory,
213 };
214}
215
216#[no_mangle]
217pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheConfig_setRedisUrl(
218 mut env: JNIEnv,
219 _class: JClass,
220 ptr: jlong,
221 url: JString,
222) {
223 if !check_not_null(&mut env, ptr, "DMSCCacheConfig") {
224 return;
225 }
226
227 let config = unsafe { &mut *(ptr as *mut DMSCCacheConfig) };
228 config.redis_url = env.get_string(&url)
229 .expect("Failed to get redis url")
230 .into();
231}
232
233#[no_mangle]
234pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheConfig_free0(
235 _env: JNIEnv,
236 _class: JClass,
237 ptr: jlong,
238) {
239 if ptr != 0 {
240 unsafe {
241 let _ = Box::from_raw(ptr as *mut DMSCCacheConfig);
242 }
243 }
244}
245
246#[no_mangle]
251pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheStats_getHits(
252 mut env: JNIEnv,
253 _class: JClass,
254 ptr: jlong,
255) -> jlong {
256 if !check_not_null(&mut env, ptr, "DMSCCacheStats") {
257 return 0;
258 }
259
260 let stats = unsafe { &*(ptr as *const DMSCCacheStats) };
261 stats.hits as jlong
262}
263
264#[no_mangle]
265pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheStats_getMisses(
266 mut env: JNIEnv,
267 _class: JClass,
268 ptr: jlong,
269) -> jlong {
270 if !check_not_null(&mut env, ptr, "DMSCCacheStats") {
271 return 0;
272 }
273
274 let stats = unsafe { &*(ptr as *const DMSCCacheStats) };
275 stats.misses as jlong
276}
277
278#[no_mangle]
279pub extern "system" fn Java_com_dunimd_dmsc_cache_DMSCCacheStats_free0(
280 _env: JNIEnv,
281 _class: JClass,
282 ptr: jlong,
283) {
284 if ptr != 0 {
285 unsafe {
286 let _ = Box::from_raw(ptr as *mut DMSCCacheStats);
287 }
288 }
289}