use pyo3::prelude::*;
mod bodies;
mod coordinates;
mod ephemeris;
mod errors;
mod events;
pub mod interop;
mod observer;
mod orbit;
mod phase;
mod position;
mod queries;
mod star;
mod target;
use bodies::PyBody;
use coordinates::PyDirection;
use ephemeris::PyRuntimeEphemeris;
use events::{PyCrossingDirection, PyCrossingEvent, PyCulminationEvent, PyCulminationKind};
use observer::PyObserver;
use orbit::{PyComet, PyOrbit};
use phase::{PyMoonPhaseGeometry, PyMoonPhaseLabel, PyPhaseEvent, PyPhaseKind};
use position::{PyPosition, PySphericalPosition};
use star::PyStar;
use target::{PyProperMotion, PyTarget};
#[pymodule]
fn _siderust(_py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_class::<PyObserver>()?;
m.add_class::<PyBody>()?;
m.add_class::<PyStar>()?;
m.add_class::<PyDirection>()?;
m.add_class::<PyPosition>()?;
m.add_class::<PySphericalPosition>()?;
m.add_class::<PyCrossingEvent>()?;
m.add_class::<PyCulminationEvent>()?;
m.add_class::<PyCrossingDirection>()?;
m.add_class::<PyCulminationKind>()?;
m.add_class::<PyMoonPhaseGeometry>()?;
m.add_class::<PyMoonPhaseLabel>()?;
m.add_class::<PyPhaseEvent>()?;
m.add_class::<PyPhaseKind>()?;
m.add_class::<PyOrbit>()?;
m.add_class::<PyComet>()?;
m.add_class::<PyProperMotion>()?;
m.add_class::<PyTarget>()?;
m.add_class::<PyRuntimeEphemeris>()?;
m.add_function(wrap_pyfunction!(queries::altitude_at, m)?)?;
m.add_function(wrap_pyfunction!(queries::above_threshold, m)?)?;
m.add_function(wrap_pyfunction!(queries::below_threshold, m)?)?;
m.add_function(wrap_pyfunction!(queries::crossings, m)?)?;
m.add_function(wrap_pyfunction!(queries::culminations, m)?)?;
m.add_function(wrap_pyfunction!(queries::azimuth_at, m)?)?;
m.add_function(wrap_pyfunction!(queries::intersect_periods, m)?)?;
m.add_function(wrap_pyfunction!(phase::moon_phase, m)?)?;
m.add_function(wrap_pyfunction!(phase::find_moon_phases, m)?)?;
m.add_function(wrap_pyfunction!(target::apply_proper_motion, m)?)?;
m.add_function(wrap_pyfunction!(observer::_bridge_observer_to_parts, m)?)?;
m.add_function(wrap_pyfunction!(observer::_bridge_observer_from_parts, m)?)?;
m.add_function(wrap_pyfunction!(
coordinates::_bridge_direction_to_parts,
m
)?)?;
m.add_function(wrap_pyfunction!(
coordinates::_bridge_direction_from_parts,
m
)?)?;
m.add("_bridge_protocol_version", interop::BRIDGE_PROTOCOL_VERSION)?;
m.add("TWILIGHT_HORIZON", queries::TWILIGHT_HORIZON)?;
m.add("TWILIGHT_CIVIL", queries::TWILIGHT_CIVIL)?;
m.add("TWILIGHT_NAUTICAL", queries::TWILIGHT_NAUTICAL)?;
m.add("TWILIGHT_ASTRONOMICAL", queries::TWILIGHT_ASTRONOMICAL)?;
m.add("__version__", env!("CARGO_PKG_VERSION"))?;
Ok(())
}