laszip-sys 0.1.2

Low level bindings to laszip
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]

#[cfg(test)]
extern crate tempfile;

#[allow(clippy::all)]
mod bindings {
    include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
}
pub use bindings::*;

#[cfg(test)]
mod tests {
    use super::*;
    use std::ffi::CString;
    use std::ptr;
    use tempfile::NamedTempFile;

    #[test]
    fn example_one() {
        unsafe {
            assert_eq!(0, laszip_load_dll());

            let mut version_major = 0;
            let mut version_minor = 0;
            let mut version_revision = 0;
            let mut version_build = 0;
            assert_eq!(
                0,
                laszip_get_version(
                    &mut version_major,
                    &mut version_minor,
                    &mut version_revision,
                    &mut version_build,
                )
            );

            let mut reader = ptr::null_mut();
            assert_eq!(0, laszip_create(&mut reader));

            let mut is_compressed = 0;
            let path = CString::new("data/autzen.laz").unwrap();
            assert_eq!(
                0,
                laszip_open_reader(reader, path.as_ptr(), &mut is_compressed,)
            );
            assert_eq!(1, is_compressed);

            let mut header = ptr::null_mut();
            assert_eq!(0, laszip_get_header_pointer(reader, &mut header));

            let npoints = if (*header).number_of_point_records == 0 {
                (*header).extended_number_of_point_records
            } else {
                (*header).number_of_point_records as u64
            };
            assert_eq!(110000, npoints);

            let mut point = ptr::null_mut();
            assert_eq!(0, laszip_get_point_pointer(reader, &mut point));

            let mut writer = ptr::null_mut();
            assert_eq!(0, laszip_create(&mut writer));

            assert_eq!(0, laszip_set_header(writer, header));

            let outfile = NamedTempFile::new().unwrap();
            let path = CString::new(outfile.path().to_string_lossy().as_ref()).unwrap();
            assert_eq!(0, laszip_open_writer(writer, path.as_ptr(), 1));

            for _ in 0..npoints {
                assert_eq!(0, laszip_read_point(reader));
                assert_eq!(0, laszip_set_point(writer, point));
                assert_eq!(0, laszip_write_point(writer));
            }

            assert_eq!(0, laszip_close_writer(writer));
            assert_eq!(0, laszip_destroy(writer));
            assert_eq!(0, laszip_close_reader(reader));
            assert_eq!(0, laszip_destroy(reader));
        }
    }
}