1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//! Safe Rust bindings to [SuperNOVAS](https://github.com/sigmyne/supernovas), a
//! high-precision astrometry library based on NOVAS (Naval Observatory Vector
//! Astrometry Software).
//!
//! # What's implemented
//!
//! - **Scalars**: [`Angle`], [`TimeAngle`], [`Coordinate`], [`Interval`],
//! [`Pressure`], [`Temperature`], [`ScalarVelocity`] — dimensioned newtypes
//! with validated constructors and unit-aware accessors.
//! - **Vectors**: [`Position`] and [`Velocity`] — 3-D Cartesian vectors with
//! arithmetic operators and cross-type ops (`Position / Interval → Velocity`,
//! `Velocity × Interval → Position`).
//! - **Spherical coordinates**: [`Spherical`] (base shape), [`Horizontal`]
//! (az/el), [`Equatorial`] (RA/Dec + equinox), [`Ecliptic`] (λ/β + equinox),
//! [`Galactic`] (`l`/`b`).
//! - **Reference systems**: [`ReferenceSystem`], [`Equinox`] — tag coordinate
//! sets with the equatorial frame they were computed in.
//! - **Refraction**: [`Refraction`] — choose None / Standard / Optical / Radio
//! when converting apparent equatorial → horizontal.
//! - **Time**: [`Time`] — UTC, TT, and split Julian dates, plus Unix epoch.
//! - **Observers**: [`Observer`] — geodetic ground site ([`Site`] + [`Weather`])
//! and geocenter.
//! - **Sources**: [`Source`] sealed trait — common interface for all source kinds.
//! - [`CatalogEntry`] — ICRS sidereal source with optional proper motion,
//! parallax, and radial velocity.
//! - [`Planet`] — major solar-system body (`Sun`, `Moon`, planets, barycenters)
//! via the installed planet provider.
//! - [`EphemObject`] — arbitrary body by name and NAIF ID from the installed
//! ephemeris provider.
//! - [`OrbitalObject`] / [`OrbitalElements`] — Keplerian elements source; no
//! external provider required.
//! - **Frame + observation**: [`Frame`] — observer × time snapshot; call
//! [`Frame::observe`] (accepts any `impl Source`) for a quick az/el, or
//! [`Source::apparent_in`] to get an [`Apparent`] position with access to
//! intermediate RA/Dec and conversion to any output frame.
//!
//! # Quick start
//!
//! ```no_run
//! use supernovas::{Accuracy, CatalogEntry, Frame, Observer, Site, Time, Weather};
//!
//! // Vega in ICRS J2000
//! let vega = CatalogEntry::icrs(
//! "Vega",
//! "18:36:56.336".parse().unwrap(),
//! "+38:47:01.28".parse().unwrap(),
//! ).unwrap();
//!
//! // OVRO site with standard atmosphere
//! let site = Site::from_degrees(37.234, -118.282, 1222.0).unwrap()
//! .with_weather(Weather::standard());
//! let observer = Observer::Geodetic(site);
//!
//! // 2026-07-15 06:00 UTC (37 leap seconds, dut1 ≈ 0)
//! let time = Time::from_utc_jd(2_461_236.75, 37, 0.0).unwrap();
//!
//! let frame = Frame::new(Accuracy::Reduced, &observer, &time).unwrap();
//! let horizontal = frame.observe(&vega).unwrap();
//! println!("{horizontal}");
//! ```
//!
//! The raw FFI bindings are re-exported as [`sys`] for callers that need to
//! drop down to the C layer directly.
// Test binaries always link std; make it available in test code.
extern crate std;
pub use supernovas_ffi as sys;
pub use ;
pub use AniseEphemeris;
pub use CalcephEphemeris;
pub use ;
pub use Equinox;
pub use ;
pub use ;
pub use ;
pub use Refraction;
pub use ;
pub use ;
pub use ;
pub use Time;
pub use ;