rust_jpl/
lib.rs

1//! # Rust JPL Ephemeris Reader
2//!
3//! A Rust library for parsing NASA JPL ephemeris data, providing precise planetary positions
4//! based on Julian dates. This library supports DE441 and other JPL ephemeris formats.
5//!
6//! ## Features
7//!
8//! - Planetary Positions: Accurate positions of celestial bodies for a given Julian date
9//! - Ephemeris Data: Utilization of DE441 file for precise planetary information
10//! - Time Conversions: Conversion between Julian dates and calendar dates
11//! - Lunar Ephemerides: Specific data for accurate moon-related calculations
12//! - Solar System Dynamics: Detailed data for understanding solar system dynamics
13//!
14//! ## Example
15//!
16//! ```no_run
17//! use rust_jpl::{Ephemeris, JulianDate};
18//!
19//! // Initialize ephemeris with configuration
20//! let eph = Ephemeris::new("config.toml")?;
21//!
22//! // Convert calendar date to Julian date
23//! let jd = JulianDate::from_calendar(2024, 1, 15, 12, 0, 0.0)?;
24//!
25//! // Get planetary position
26//! let position = eph.get_position("Earth", jd)?;
27//! println!("Earth position: ({}, {}, {}) AU", position.x, position.y, position.z);
28//! # Ok::<(), rust_jpl::Error>(())
29//! ```
30
31pub mod config;
32pub mod ephemeris;
33pub mod time;
34
35pub use ephemeris::{Ephemeris, EphemerisMetadata, Position, SpaceObject};
36pub use time::{CalendarDate, JulianDate};
37
38/// Error types for the library
39#[derive(Debug)]
40pub enum Error {
41    /// Configuration error
42    Config(String),
43    /// I/O error
44    Io(std::io::Error),
45    /// Invalid date/time error
46    InvalidDate(String),
47    /// Ephemeris data error
48    Ephemeris(String),
49}
50
51impl std::fmt::Display for Error {
52    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
53        match self {
54            Error::Config(msg) => write!(f, "Configuration error: {}", msg),
55            Error::Io(err) => write!(f, "I/O error: {}", err),
56            Error::InvalidDate(msg) => write!(f, "Invalid date: {}", msg),
57            Error::Ephemeris(msg) => write!(f, "Ephemeris error: {}", msg),
58        }
59    }
60}
61
62impl std::error::Error for Error {}
63
64impl From<std::io::Error> for Error {
65    fn from(err: std::io::Error) -> Self {
66        Error::Io(err)
67    }
68}
69
70pub type Result<T> = std::result::Result<T, Error>;