basic_usage/
basic_usage.rs1use rust_jpl::Ephemeris;
10
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12 println!("=== Rust JPL Ephemeris Reader - Basic Usage Example ===\n");
13
14 println!("1. Initializing Ephemeris...");
16 let eph = Ephemeris::new("config.toml")?;
17 println!(" ✓ Ephemeris loaded successfully\n");
18
19 println!("2. Ephemeris Metadata:");
21 let metadata = eph.get_metadata();
22 println!(
23 " - Date Range: {} - {}",
24 metadata.start_year, metadata.end_year
25 );
26 println!(
27 " - Julian Date Range: {:.2} - {:.2}",
28 metadata.julian_start, metadata.julian_end
29 );
30 println!(" - Interval: {} days", metadata.interval_days);
31 println!(
32 " - Earth-Moon Mass Ratio: {:.6}",
33 metadata.earth_moon_ratio
34 );
35 println!(
36 " - Number of Coefficients: {}\n",
37 metadata.number_of_coefficients
38 );
39
40 println!("3. Available Celestial Bodies:");
42 for body in eph.get_bodies() {
43 let status = if body.active { "✓" } else { "✗" };
44 println!(
45 " {} {} ({})",
46 status,
47 body.name,
48 if body.active { "active" } else { "inactive" }
49 );
50 }
51 println!();
52
53 println!("4. Time Conversion Example:");
55 let calendar_date = rust_jpl::CalendarDate::new(2024, 1, 15, 12, 0, 0.0);
56 println!(
57 " Calendar Date: {}-{:02}-{:02} {:02}:{:02}:{:02}",
58 calendar_date.year,
59 calendar_date.month,
60 calendar_date.day,
61 calendar_date.hour,
62 calendar_date.minute,
63 calendar_date.second as i32
64 );
65
66 let jd = calendar_date.to_julian()?;
67 println!(" Julian Date: {:.6}", jd.as_f64());
68
69 let converted_back = jd.to_calendar();
70 println!(
71 " Converted back: {}-{:02}-{:02} {:02}:{:02}:{:02}\n",
72 converted_back.year,
73 converted_back.month,
74 converted_back.day,
75 converted_back.hour,
76 converted_back.minute,
77 converted_back.second as i32
78 );
79
80 println!(
82 "5. Planetary Positions (at Julian Date {:.6}):",
83 jd.as_f64()
84 );
85 let bodies = [
86 "Sun", "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn",
87 ];
88
89 for body_name in &bodies {
90 match eph.get_position(body_name, jd) {
91 Ok(pos) => {
92 println!(
93 " {}: ({:12.6}, {:12.6}, {:12.6}) AU, Distance: {:.6} AU",
94 body_name,
95 pos.x,
96 pos.y,
97 pos.z,
98 pos.distance()
99 );
100 }
101 Err(e) => {
102 println!(" {}: Error - {}", body_name, e);
103 }
104 }
105 }
106
107 println!("\n=== Example Complete ===");
108 Ok(())
109}