discid_sys/
lib.rs

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}