use std::os::raw::c_char;
use time::macros::format_description;
pub fn format_timestamp(timestamp: i64) -> Result<String, time::error::Error> {
let format = format_description!("[year]-[month]-[day]T[hour]:[minute]:[second]");
let ts = time::OffsetDateTime::from_unix_timestamp(timestamp)?;
let formatted = ts.format(&format)?;
Ok(formatted)
}
#[no_mangle]
pub unsafe extern "C" fn sc_x509_format_timestamp(
timestamp: i64, buf: *mut c_char, size: usize,
) -> bool {
let timestamp = match format_timestamp(timestamp) {
Ok(ts) => ts,
Err(_) => return false,
};
crate::ffi::strings::copy_to_c_char(timestamp, buf, size)
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_format_timestamp() {
assert_eq!("1969-12-31T00:00:00", format_timestamp(-86400).unwrap());
assert_eq!("2038-12-31T00:10:03", format_timestamp(2177367003).unwrap());
}
}