lox_orbits/
propagators.rs1use lox_bodies::Origin;
6use lox_time::Time;
7use lox_time::time_scales::TimeScale;
8
9use crate::trajectories::TrajectoryError;
10use crate::{states::State, trajectories::Trajectory};
11use lox_frames::ReferenceFrame;
12
13pub mod semi_analytical;
14pub mod sgp4;
15mod stumpff;
16
17pub trait Propagator<T, O, R>
18where
19 T: TimeScale + Clone,
20 O: Origin + Clone,
21 R: ReferenceFrame + Clone,
22{
23 type Error: From<TrajectoryError>;
24
25 fn propagate(&self, time: Time<T>) -> Result<State<T, O, R>, Self::Error>;
26
27 fn propagate_all(
28 &self,
29 times: impl IntoIterator<Item = Time<T>>,
30 ) -> Result<Trajectory<T, O, R>, Self::Error> {
31 let mut states = vec![];
32 for time in times {
33 let state = self.propagate(time)?;
34 states.push(state);
35 }
36 Ok(Trajectory::new(&states)?)
37 }
38}