use supernovas::{Accuracy, Angle, CatalogEntry, Frame, Interval, Observer, ScalarVelocity, Time};
fn main() -> Result<(), Box<dyn core::error::Error>> {
let barnard = CatalogEntry::icrs(
"Barnard's Star",
"17:57:48.498".parse()?, "-04:41:36.19".parse()?, )?
.with_proper_motion_mas_per_yr(-798.71, 10_337.77)? .with_parallax(Angle::from_mas(548.31)?)? .with_radial_velocity(ScalarVelocity::from_km_per_s(-110.51)?)?;
let observer = Observer::Geocenter;
let epoch_2000 = Time::from_tt_jd(2_451_545.0, 32, 0.0)?;
let epoch_2025 = epoch_2000 + Interval::from_julian_years(25.0)?;
let frame_2000 = Frame::new(Accuracy::Reduced, &observer, &epoch_2000)?;
let frame_2025 = Frame::new(Accuracy::Reduced, &observer, &epoch_2025)?;
let app_2000 = barnard.apparent_in(&frame_2000, supernovas::ReferenceSystem::Icrs)?;
let app_2025 = barnard.apparent_in(&frame_2025, supernovas::ReferenceSystem::Icrs)?;
let eq_2000 = app_2000.equatorial();
let eq_2025 = app_2025.equatorial();
println!("Barnard's Star - apparent ICRS position\n");
println!(
" Epoch J2000 RA {:.6} Dec {:+.5}°",
eq_2000.ra(),
eq_2000.dec().deg()
);
println!(
" Epoch J2025 RA {:.6} Dec {:+.5}°",
eq_2025.ra(),
eq_2025.dec().deg()
);
let sep = eq_2000.distance_to(eq_2025);
println!("\n 25-year drift: {:.1} arcsec", sep.arcsec());
Ok(())
}