1pub mod ffi;
2
3pub fn get_version() -> String {
22 let pkg_version = env!("CARGO_PKG_VERSION");
23 let profile = if cfg!(debug_assertions) {
24 "debug"
25 } else {
26 "release"
27 };
28 let target = env!("TARGET");
29 format!(
30 "riidefi/brres-sys: Version: {}, Profile: {}, Target: {}",
31 pkg_version, profile, target
32 )
33}
34
35#[cfg(test)]
36mod tests {
37 use crate::ffi::*;
38
39 #[test]
40 fn test_from_bytes() {
41 let buffer = vec![
42 0x52, 0x42, 0x55, 0x46, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
50 0x0E, 0x0F,
51 ];
52 let result = CBrresWrapper::from_bytes(&buffer);
53 assert!(!result.is_ok());
54 }
55
56 #[test]
57 fn test_write_bytes() {
58 let json = r#"{}"#; let buffer = vec![
60 0x52, 0x42, 0x55, 0x46, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
68 0x0E, 0x0F,
69 ];
70 let result = CBrresWrapper::write_bytes(json, &buffer);
71 assert!(result.is_ok());
72 }
73}
74
75#[cfg(feature = "c_api")]
81pub mod c_api {
82 use crate::*;
83
84 #[no_mangle]
85 pub extern "C" fn brres_get_version_unstable_api(buffer: *mut u8, length: u32) -> i32 {
86 let version_info = get_version();
87 let string_length = version_info.len();
88
89 if string_length > length as usize {
90 return -1;
91 }
92
93 let buffer_slice = unsafe {
94 assert!(!buffer.is_null());
95 std::slice::from_raw_parts_mut(buffer, length as usize)
96 };
97
98 for (i, byte) in version_info.as_bytes().iter().enumerate() {
99 buffer_slice[i] = *byte;
100 }
101
102 string_length as i32
103 }
104}