rust-spice 0.4.7

WOW! The complete NASA/NAIF Spice toolkit is actually usable on Rust.
Documentation
use spice;

fn main() -> Result<(), spice::KernelError> {
    let mut kernel = spice::Kernel::new("rsc/krn/hera_study_PO_EMA_2024.tm")?;
    let inertial_frame = "J2000";
    let system_frame = "DIDYMOS_FIXED";
    let body_frame = "DIMORPHOS_FIXED";
    let observer = "SUN";
    let target = "DIMORPHOS";
    let date = "2027-MAR-23 16:00:00";
    let abcorr = "NONE";
    let time_step = 3600.0;

    let et = spice::str2et(date);

    let (position, _) = spice::spkpos(target, et, inertial_frame, abcorr, observer);

    let system_rotate = spice::pxform(inertial_frame, system_frame, et);
    let body_rotate = spice::pxform(inertial_frame, body_frame, et);
    let rotate_step = spice::pxfrm2(body_frame, body_frame, et, et + time_step);
    let rotate_step_1 = spice::pxfrm2(system_frame, system_frame, et, et + time_step);

    println!(
        "{} position in {} wrt {} (km): {:.2}",
        target, inertial_frame, observer, position
    );
    println!(
        "rotation {} -> {}: {:.2}",
        inertial_frame,
        system_frame,
        system_rotate.matrix()
    );
    println!(
        "rotation {} -> {}: {:.2}",
        inertial_frame,
        body_frame,
        body_rotate.matrix()
    );
    println!(
        "rotation of {} itself after {:0} seconds: {:.2}",
        body_frame,
        time_step,
        rotate_step.matrix()
    );
    println!(
        "rotation of {} itself after {:0} seconds: {:.2}",
        system_frame,
        time_step,
        rotate_step_1.matrix()
    );

    kernel.unload()?;
    Ok(())
}