satellite 0.1.2

Modular set of functions for SGP4 and SDP4 propagation of TLEs.
Documentation

use wasm_bindgen::prelude::*;
use crate::constants::MINUTES_PER_DAY;
use serde_wasm_bindgen::to_value;
use crate::ext::{jday, jday_date};
use crate::propagation::sgp4::{sgp4, Sgp4Error, Sgp4Result};
use crate::SatRec;

use chrono::prelude::*;
use chrono::DateTime;


pub fn propagate(
    satrec: &mut SatRec,
    year: f64,
    mon: f64,
    day: f64,
    hour: f64,
    minute: f64,
    sec: f64,
    msec: f64,
) -> Result<Sgp4Result, Sgp4Error> {
    let j = jday(year, mon, day, hour, minute, sec, msec);
    let m = (j - satrec.jdsatepoch) * MINUTES_PER_DAY;
    sgp4(satrec, m)
}

#[wasm_bindgen(js_name="propagate")]
pub fn js_propagate( 
    satrec: &mut SatRec,
    year: f64,
    mon: f64,
    day: f64,
    hour: f64,
    minute: f64,
    sec: f64,
    msec: f64,)->Result<JsValue, JsValue>{
    let result =  propagate(satrec, year, mon, day, hour, minute, sec, msec);
    match result {
        Ok(sgp4_result) => Ok(to_value(&sgp4_result).unwrap()),
        Err(sgp4_error) => Err(to_value(&sgp4_error).unwrap()),
    }
}

pub fn propagate_date(satrec: &mut SatRec, date: &DateTime<Utc>) -> Result<Sgp4Result, Sgp4Error> {
    let j = jday_date(*date);
    let m = (j - satrec.jdsatepoch) * MINUTES_PER_DAY;
    sgp4(satrec, m)
}