use std::ffi::c_char;
use crate::{
datetime::{unix_nanos_to_iso8601, unix_nanos_to_iso8601_millis},
ffi::{abort_on_panic, string::str_to_cstr},
};
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn unix_nanos_to_iso8601_cstr(timestamp_ns: u64) -> *const c_char {
abort_on_panic(|| str_to_cstr(&unix_nanos_to_iso8601(timestamp_ns.into())))
}
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn unix_nanos_to_iso8601_millis_cstr(timestamp_ns: u64) -> *const c_char {
abort_on_panic(|| str_to_cstr(&unix_nanos_to_iso8601_millis(timestamp_ns.into())))
}
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn secs_to_nanos(secs: f64) -> u64 {
abort_on_panic(|| crate::datetime::secs_to_nanos_unchecked(secs))
}
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn secs_to_millis(secs: f64) -> u64 {
abort_on_panic(|| {
crate::datetime::secs_to_millis(secs).expect("secs_to_millis: invalid or overflowing input")
})
}
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn millis_to_nanos(millis: f64) -> u64 {
abort_on_panic(|| crate::datetime::millis_to_nanos_unchecked(millis))
}
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn micros_to_nanos(micros: f64) -> u64 {
abort_on_panic(|| crate::datetime::micros_to_nanos_unchecked(micros))
}
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn nanos_to_secs(nanos: u64) -> f64 {
abort_on_panic(|| crate::datetime::nanos_to_secs(nanos))
}
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn nanos_to_millis(nanos: u64) -> u64 {
abort_on_panic(|| crate::datetime::nanos_to_millis(nanos))
}
#[cfg(feature = "ffi")]
#[unsafe(no_mangle)]
pub extern "C" fn nanos_to_micros(nanos: u64) -> u64 {
abort_on_panic(|| crate::datetime::nanos_to_micros(nanos))
}