fits-io 0.2.0

A pure-Rust FITS file reading and writing library inspired by CFITSIO, focused on safety, clarity, and performance.
Documentation
mod common;

use common::fixture;
use fits_io::Fits;
use fits_io::fs::FsFits;
use fits_io::hdu::{BinTableHDU, ExtensionHDU};

#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
struct GaiaCatalogEntry {
    pub source_id: i64,
    pub ra: f64,
    pub dec: f64,
    pub phot_g_mean_mag: f32,
}

#[test]
pub fn open_bin_table_should_work() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    let Some(path) = fixture("gaia-dr3-mag-gt-12.fits") else {
        return Ok(());
    };

    let fits = FsFits::open(&path)?;

    if let Some(ExtensionHDU::BinTable(bin_table)) = fits.extension_hdu(0) {
        let rows: Vec<GaiaCatalogEntry> = bin_table.read_rows()?;

        assert_eq!(rows.len(), 2482633);
    } else {
        panic!("No extension 0 found");
    }

    Ok(())
}