#![doc = include_str!("../README.md")]
#![cfg_attr(docsrs, feature(doc_cfg))]
extern crate const_format;
extern crate hifitime;
extern crate log;
pub mod almanac;
#[cfg(feature = "analysis")]
pub mod analysis;
pub mod astro;
pub mod constants;
pub mod ephemerides;
pub mod errors;
pub mod frames;
pub mod math;
pub mod naif;
pub mod orientations;
pub mod structure;
pub mod time {
pub use core::str::FromStr;
pub use hifitime::*;
pub(crate) fn uuid_from_epoch(id: i32, epoch: Epoch) -> i32 {
let wrapped_days = epoch
.to_tdb_duration()
.to_unit(hifitime::Unit::Microsecond)
.floor()
.rem_euclid(f64::from(i32::MAX)) as i32;
(id * 10_000).wrapping_add(wrapped_days)
}
}
pub mod prelude {
#[cfg(feature = "metaload")]
pub use crate::almanac::metaload::MetaAlmanac;
pub use crate::almanac::Almanac;
pub use crate::astro::{orbit::Orbit, Aberration};
pub use crate::errors::InputOutputError;
pub use crate::frames::*;
pub use crate::math::units::*;
pub use crate::naif::daf::NAIFSummaryRecord;
pub use crate::naif::{BPC, SPK};
pub use crate::structure::instrument::{FovShape, Instrument};
pub use crate::time::*;
pub use std::fs::File;
}
#[cfg(feature = "python")]
mod py_errors;
pub(crate) const DBL_SIZE: usize = 8;
pub(crate) type NaifId = i32;
#[macro_export]
macro_rules! file2heap {
($filename:tt) => {
match std::fs::read($filename) {
Err(e) => Err($crate::errors::InputOutputError::IOError { kind: e.kind() }),
Ok(bytes) => {
use bytes::BytesMut;
Ok(BytesMut::from(&bytes[..]))
}
}
};
}
#[macro_export]
macro_rules! file_mmap {
($filename:tt) => {
match File::open($filename) {
Err(e) => Err(InputOutputError::IOError { kind: e.kind() }),
Ok(file) => unsafe {
use memmap2::MmapOptions;
match MmapOptions::new().map(&file) {
Err(_) => Err(InputOutputError::IOUnknownError),
Ok(mmap) => Ok(mmap),
}
},
}
};
}