1#![allow(improper_ctypes)]
52
53mod aliases;
54pub use aliases::*;
55
56#[cfg(not(feature = "bindgen"))]
57#[allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
58#[allow(
59 clippy::unreadable_literal,
60 clippy::transmute_ptr_to_ptr,
61 clippy::redundant_static_lifetimes,
62 clippy::missing_safety_doc,
63 clippy::should_implement_trait,
64 clippy::upper_case_acronyms
65)]
66mod sys {
67
68 #[cfg(target_pointer_width = "64")]
72 include!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/bindings_64.rs"));
73 #[cfg(target_pointer_width = "32")]
74 include!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/bindings_32.rs"));
75}
76
77#[cfg(feature = "bindgen")]
78#[allow(
79 non_upper_case_globals,
80 non_camel_case_types,
81 non_snake_case,
82 improper_ctypes
83)]
84#[allow(
86 clippy::unreadable_literal,
87 clippy::transmute_ptr_to_ptr,
88 clippy::redundant_static_lifetimes,
89 clippy::missing_safety_doc,
90 clippy::useless_transmute,
91 clippy::trivially_copy_pass_by_ref,
92 clippy::too_many_arguments,
93 clippy::should_implement_trait,
94 clippy::upper_case_acronyms
95)]
96mod sys {
97 include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
98}
99
100pub use sys::*;
101
102pub struct CfitsioVersion {
106 pub minor: u32,
108 pub major: u32,
110}
111
112impl std::fmt::Display for CfitsioVersion {
113 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
114 write!(f, "{}.{}", self.major, self.minor)
115 }
116}
117
118pub fn cfitsio_version() -> CfitsioVersion {
119 CfitsioVersion {
120 minor: CFITSIO_MINOR,
124 major: CFITSIO_MAJOR,
125 }
126}
127
128#[cfg(test)]
129mod tests {
130 use std::{ffi::CString, ptr};
131
132 use crate::{
133 aliases::{fits_get_num_rows, fits_movabs_hdu, fits_open_file},
134 ffgnrw, ffmahd, ffopen,
135 };
136
137 #[test]
138 fn fitsio_sys_works() {
139 let mut fptr = ptr::null_mut();
140 let filename = CString::new("../testdata/full_example.fits").expect("valid C string");
141 let iomode = 0; let mut num_table_rows = 0;
143 let mut status = 0;
144
145 unsafe {
146 ffopen(&mut fptr, filename.as_ptr(), iomode, &mut status);
147 assert_eq!(status, 0);
148
149 ffmahd(fptr, 2, &mut 0, &mut status);
150 assert_eq!(status, 0);
151
152 ffgnrw(fptr, &mut num_table_rows, &mut status);
153 assert_eq!(status, 0);
154 assert_eq!(num_table_rows, 50);
155 }
156 }
157
158 #[test]
159 fn fitsio_sys_aliases_work() {
160 let mut fptr = ptr::null_mut();
161 let filename = CString::new("../testdata/full_example.fits").expect("valid C string");
162 let iomode = 0; let mut num_table_rows = 0;
164 let mut status = 0;
165
166 unsafe {
167 fits_open_file(&mut fptr, filename.as_ptr(), iomode, &mut status);
168 assert_eq!(status, 0);
169
170 fits_movabs_hdu(fptr, 2, &mut 0, &mut status);
171 assert_eq!(status, 0);
172
173 fits_get_num_rows(fptr, &mut num_table_rows, &mut status);
174 assert_eq!(status, 0);
175 assert_eq!(num_table_rows, 50);
176 }
177 }
178}