Skip to main content

libczirw_sys/
lib.rs

1extern crate link_cplusplus;
2
3pub mod error;
4mod functions;
5mod handle;
6mod interop;
7mod misc;
8pub mod sys;
9
10pub use functions::*;
11pub use handle::*;
12pub use interop::*;
13pub use misc::{Dimension, PixelType, RawDataType};
14
15#[cfg(test)]
16mod tests {
17    use crate::handle::{CziReader, InputStream};
18    use crate::interop::{LibCZIBuildInformation, ReaderOpenInfo};
19    use crate::misc::Dimension;
20    use std::env;
21    use std::path::PathBuf;
22
23    #[test]
24    fn test_read_shape() -> Result<(), Box<dyn std::error::Error>> {
25        let path = env::home_dir()
26            .unwrap()
27            .join("code/rust/ndbioimage/tests/files/Experiment-2029.czi");
28        assert!(path.exists());
29        let czi = CziReader::create()?;
30        let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
31        let open_info = ReaderOpenInfo::new(&stream);
32        czi.open(open_info)?;
33        println!("pyramid statistics: {:?}", czi.get_pyramid_statistics()?);
34        println!("file header info: {:?}", czi.get_file_header_info()?);
35        let statistics_simple = czi.get_statistics_simple()?;
36        println!("statistics simple: {:?}", czi.get_statistics_simple()?);
37        let bounding_box = statistics_simple.get_bounding_box();
38        let dim_bounds = statistics_simple.get_dim_bounds();
39        let dimensions = Dimension::vec_from_bitflags(dim_bounds.get_dimensions_valid());
40        let size = dim_bounds.get_size();
41        for (i, d) in dimensions.iter().enumerate() {
42            println!("{:?}: {}", d, size[i]);
43        }
44        println!("X: {}", bounding_box.get_w());
45        println!("Y: {}", bounding_box.get_h());
46        Ok(())
47    }
48
49    #[test]
50    fn test_read_bytes() -> Result<(), Box<dyn std::error::Error>> {
51        let path = env::home_dir()
52            .unwrap()
53            .join("code/rust/ndbioimage/tests/files/Experiment-2029.czi");
54        assert!(path.exists());
55        let czi = CziReader::create()?;
56        let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
57        let open_info = ReaderOpenInfo::new(&stream);
58        czi.open(open_info)?;
59        let sub_block = czi.read_sub_block(0)?;
60        let bitmap = sub_block.create_bitmap()?.lock()?;
61        let bitmap_info = bitmap.get_info()?;
62        println!(
63            "height: {}, width: {} pixel type: {:#?}",
64            bitmap_info.get_height(),
65            bitmap_info.get_width(),
66            bitmap_info.get_pixel_type()?
67        );
68        let bytes = bitmap.lock_info.get_data_roi();
69        println!("bytes: {:?}", bytes.as_slice()[..100].to_vec());
70        Ok(())
71    }
72
73    #[test]
74    fn test_libczi_xml() -> Result<(), Box<dyn std::error::Error>> {
75        let path = env::home_dir()
76            .unwrap()
77            .join("code/rust/ndbioimage/tests/files/Experiment-2029.czi");
78        assert!(path.exists());
79        let czi = CziReader::create()?;
80        let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
81        let open_info = ReaderOpenInfo::new(&stream);
82        czi.open(open_info)?;
83        let metadata_segment = czi.get_metadata_segment()?;
84        let xml = metadata_segment.get_metadata_as_xml()?;
85        let s = String::try_from(&xml)?;
86        println!("xml: {}", &s[..s.len().min(100)]);
87        Ok(())
88    }
89
90    #[test]
91    fn test_libczi_pyramid_statistics() -> Result<(), Box<dyn std::error::Error>> {
92        let path = PathBuf::from("test-files/Experiment-2029.czi");
93        assert!(path.exists());
94        let czi = CziReader::create()?;
95        let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
96        let open_info = ReaderOpenInfo::new(&stream);
97        czi.open(open_info)?;
98        let s = czi.get_pyramid_statistics()?;
99        println!("xml: {}", &s[..s.len().min(100)]);
100        Ok(())
101    }
102
103    #[test]
104    fn test_libczi_document_info() -> Result<(), Box<dyn std::error::Error>> {
105        let path = PathBuf::from("test-files/Experiment-2029.czi");
106        assert!(path.exists());
107        let czi = CziReader::create()?;
108        let stream = InputStream::create_from_file_utf8(path.to_string_lossy().as_ref())?;
109        let open_info = ReaderOpenInfo::new(&stream);
110        czi.open(open_info)?;
111        let metadata_segment = czi.get_metadata_segment()?;
112        let document_info = metadata_segment.get_czi_document_info()?;
113        let general_document_info = document_info.get_general_document_info()?;
114        println!(
115            "xml: {}",
116            &general_document_info[..general_document_info.len().min(100)]
117        );
118        Ok(())
119    }
120
121    #[test]
122    fn test_lib_czi_build_information() -> Result<(), Box<dyn std::error::Error>> {
123        let build_info = LibCZIBuildInformation::get()?;
124        println!(
125            "compiler information: {:?}",
126            build_info.get_compiler_information()
127        );
128        println!("repository url: {:?}", build_info.get_repository_url());
129        println!(
130            "repository branch: {:?}",
131            build_info.get_repository_branch()
132        );
133        println!("repository tag: {:?}", build_info.get_repository_tag());
134        Ok(())
135    }
136}