1#![allow(non_camel_case_types)]
2#![allow(non_upper_case_globals)]
3#![allow(clippy::redundant_static_lifetimes)]
4
5use std::ffi::c_uint;
6
7include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
8
9impl From<discid_feature> for c_uint {
10 fn from(item: discid_feature) -> Self {
11 item.0
12 }
13}
14
15#[cfg(test)]
16mod tests {
17 use super::*;
18 use std::ffi::CStr;
19 use std::os::raw::c_char;
20
21 #[test]
22 fn test_discid_put() {
23 unsafe {
24 let disc = discid_new();
25 let first_track = 1;
26 let offsets: [i32; 3] = [2000, 150, 1000];
27 let last_track = (offsets.len() - 1) as i32;
28 let success = discid_put(disc, first_track, last_track, offsets.as_ptr() as *mut i32);
29 let error_msg_ptr = discid_get_error_msg(disc);
30 assert!(success == 1, "discid_put: {}", from_str_ptr(error_msg_ptr));
31
32 let id_str_ptr = discid_get_id(disc);
33 assert_eq!("YPv1TJ03f7pu6fgwp1cpr3cVsf0-", from_str_ptr(id_str_ptr));
34 discid_free(disc);
35 }
36 }
37
38 #[test]
39 fn test_discid_feature() {
40 let features = discid_feature::DISCID_FEATURE_READ | discid_feature::DISCID_FEATURE_ISRC;
41 assert_eq!(5, features.0);
42 }
43
44 #[test]
45 fn test_has_feature() {
46 unsafe {
47 assert_eq!(1, discid_has_feature(discid_feature::DISCID_FEATURE_READ));
48 }
49 }
50
51 fn from_str_ptr(str_ptr: *mut c_char) -> &'static str {
52 let c_str: &CStr = unsafe { CStr::from_ptr(str_ptr) };
53 c_str.to_str().unwrap()
54 }
55}