#![allow(improper_ctypes)]
mod aliases;
pub use aliases::*;
#[cfg(not(feature = "bindgen"))]
#[allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
#[allow(
clippy::unreadable_literal,
clippy::transmute_ptr_to_ptr,
clippy::redundant_static_lifetimes,
clippy::missing_safety_doc,
clippy::should_implement_trait,
clippy::upper_case_acronyms
)]
mod sys {
#[cfg(target_pointer_width = "64")]
include!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/bindings_64.rs"));
#[cfg(target_pointer_width = "32")]
include!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/bindings_32.rs"));
}
#[cfg(feature = "bindgen")]
#[allow(
non_upper_case_globals,
non_camel_case_types,
non_snake_case,
improper_ctypes
)]
#[allow(
clippy::unreadable_literal,
clippy::transmute_ptr_to_ptr,
clippy::redundant_static_lifetimes,
clippy::missing_safety_doc,
clippy::useless_transmute,
clippy::trivially_copy_pass_by_ref,
clippy::too_many_arguments,
clippy::should_implement_trait,
clippy::upper_case_acronyms
)]
mod sys {
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
}
pub use sys::*;
pub struct CfitsioVersion {
pub minor: u32,
pub major: u32,
}
impl std::fmt::Display for CfitsioVersion {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}.{}", self.major, self.minor)
}
}
pub fn cfitsio_version() -> CfitsioVersion {
CfitsioVersion {
minor: CFITSIO_MINOR,
major: CFITSIO_MAJOR,
}
}
#[cfg(test)]
mod tests {
use std::{ffi::CString, ptr};
use crate::{
aliases::{fits_get_num_rows, fits_movabs_hdu, fits_open_file},
ffgnrw, ffmahd, ffopen,
};
#[test]
fn fitsio_sys_works() {
let mut fptr = ptr::null_mut();
let filename = CString::new("../testdata/full_example.fits").expect("valid C string");
let iomode = 0; let mut num_table_rows = 0;
let mut status = 0;
unsafe {
ffopen(&mut fptr, filename.as_ptr(), iomode, &mut status);
assert_eq!(status, 0);
ffmahd(fptr, 2, &mut 0, &mut status);
assert_eq!(status, 0);
ffgnrw(fptr, &mut num_table_rows, &mut status);
assert_eq!(status, 0);
assert_eq!(num_table_rows, 50);
}
}
#[test]
fn fitsio_sys_aliases_work() {
let mut fptr = ptr::null_mut();
let filename = CString::new("../testdata/full_example.fits").expect("valid C string");
let iomode = 0; let mut num_table_rows = 0;
let mut status = 0;
unsafe {
fits_open_file(&mut fptr, filename.as_ptr(), iomode, &mut status);
assert_eq!(status, 0);
fits_movabs_hdu(fptr, 2, &mut 0, &mut status);
assert_eq!(status, 0);
fits_get_num_rows(fptr, &mut num_table_rows, &mut status);
assert_eq!(status, 0);
assert_eq!(num_table_rows, 50);
}
}
}