libmseed_sys/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4
5include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
6
7#[cfg(test)]
8mod tests {
9    use std::ffi::CStr;
10    use std::ffi::CString;
11    use std::ptr;
12
13    use super::*;
14
15    #[test]
16    fn basic() {
17        let mut fp: *mut MS3FileParam = ptr::null_mut();
18        let mut msr: *mut MS3Record = unsafe { msr3_init(ptr::null_mut()) };
19
20        let flags: u32 = MSF_UNPACKDATA;
21        let verbose: i8 = 0;
22        let mspath = CString::new("tests/multiple.seed").unwrap();
23
24        let rv = unsafe {
25            ms3_readmsr_r(
26                (&mut fp) as *mut *mut MS3FileParam,
27                (&mut msr) as *mut *mut MS3Record,
28                mspath.as_ptr(),
29                flags,
30                verbose,
31            )
32        };
33        assert_eq!(rv, MS_NOERROR as i32);
34        let ms = unsafe { *msr };
35        assert_eq!(ms.reclen, 512);
36        let sid = unsafe { CStr::from_ptr(ms.sid.as_ptr()) }.to_str().unwrap();
37        assert_eq!(sid, "FDSN:IU_ANMO_00_B_H_Z");
38        assert_eq!(ms.starttime, 1267252200019538000);
39        assert_eq!(ms.samprate, 20.0);
40        assert_eq!(ms.encoding, DE_STEIM2 as i16);
41        assert_eq!(ms.pubversion, 4);
42        assert_eq!(ms.samplecnt, 419);
43        assert_eq!(ms.crc, 0);
44        assert_eq!(ms.extralength, 33);
45        assert_eq!(ms.datalength, 448);
46        assert!(!ms.extra.is_null());
47        assert!(!ms.datasamples.is_null());
48        assert_eq!(ms.datasize, 419 * 4);
49        assert_eq!(ms.numsamples, 419);
50        assert_eq!(ms.sampletype, 'i' as std::os::raw::c_char);
51
52        let rv = unsafe {
53            ms3_readmsr_r(
54                (&mut fp) as *mut *mut MS3FileParam,
55                (&mut msr) as *mut *mut MS3Record,
56                mspath.as_ptr(),
57                flags,
58                verbose,
59            )
60        };
61
62        assert_eq!(rv, MS_NOERROR as i32);
63        let ms = unsafe { *msr };
64        assert_eq!(ms.reclen, 512);
65        let sid = unsafe { CStr::from_ptr(ms.sid.as_ptr()) }.to_str().unwrap();
66        assert_eq!(sid, "FDSN:IU_ANMO_00_B_H_Z");
67        assert_eq!(ms.starttime, 1267252220969538000);
68        assert_eq!(ms.samprate, 20.0);
69        assert_eq!(ms.encoding, DE_STEIM2 as i16);
70        assert_eq!(ms.pubversion, 4);
71        assert_eq!(ms.samplecnt, 368);
72        assert_eq!(ms.crc, 0);
73        assert_eq!(ms.extralength, 33);
74        assert_eq!(ms.datalength, 448);
75        assert!(!ms.extra.is_null());
76        assert!(!ms.datasamples.is_null());
77        assert_eq!(ms.datasize, 368 * 4);
78        assert_eq!(ms.numsamples, 368);
79        assert_eq!(ms.sampletype, 'i' as std::os::raw::c_char);
80
81        unsafe {
82            ms3_readmsr_r(
83                (&mut fp) as *mut *mut MS3FileParam,
84                (&mut msr) as *mut *mut MS3Record,
85                ptr::null(),
86                flags,
87                verbose,
88            );
89        }
90    }
91}