erfars 0.2.0

Safe Rust bindings to the Essential Routines for Fundamental Astronomy (ERFA) C library.
Documentation
//! ERFA Space Motion Functions

use crate::{ERFAResult, raw::spacemotion::*, unexpected_val_err};

/// Convert star position+velocity vector to catalog coordinates.
///
/// Please see the full ERFA docs for this function [here](https://github.com/liberfa/erfa/blob/master/src/pvstar.c)
pub fn Pvstar(pv: &[f64; 6]) -> ERFAResult<(f64, f64, f64, f64, f64, f64)> {
    let mut ra: f64 = 0.0;
    let mut dec: f64 = 0.0;
    let mut pmr: f64 = 0.0;
    let mut pmd: f64 = 0.0;
    let mut px: f64 = 0.0;
    let mut rv: f64 = 0.0;
    let err: i32;
    unsafe { err = eraPvstar(pv, &mut ra, &mut dec, &mut pmr, &mut pmd, &mut px, &mut rv) }

    match err {
        0 => Ok(((ra, dec, pmr, pmd, px, rv), 0)),
        -1 => Err(-1),
        -2 => Err(-2),
        _ => unexpected_val_err!(eraPvstar),
    }
}

/// Convert star catalog coordinates to position+velocity vector.
///
/// Please see the full ERFA docs for this function [here](https://github.com/liberfa/erfa/blob/master/src/starpv.c)
pub fn Starpv(ra: f64, dec: f64, pmr: f64, pmd: f64, px: f64, rv: f64) -> ERFAResult<[f64; 6]> {
    let mut pv: [f64; 6] = [0.0; 6];
    let err: i32;
    unsafe { err = eraStarpv(ra, dec, pmr, pmd, px, rv, &mut pv) }

    if err >= 0 { return Ok((pv, err)) } else { unexpected_val_err!(eraStarpv) }
}