use num_derive::{FromPrimitive, ToPrimitive};
use realsense_sys as sys;
use std::{ffi::CStr, fmt::Display};
#[repr(i32)]
#[derive(FromPrimitive, ToPrimitive, Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Rs2TimestampDomain {
HardwareClock = sys::rs2_timestamp_domain_RS2_TIMESTAMP_DOMAIN_HARDWARE_CLOCK as i32,
SystemTime = sys::rs2_timestamp_domain_RS2_TIMESTAMP_DOMAIN_SYSTEM_TIME as i32,
GlobalTime = sys::rs2_timestamp_domain_RS2_TIMESTAMP_DOMAIN_GLOBAL_TIME as i32,
}
impl Rs2TimestampDomain {
pub fn as_cstr(&self) -> &'static CStr {
unsafe {
let ptr = sys::rs2_timestamp_domain_to_string(*self as sys::rs2_timestamp_domain);
CStr::from_ptr(ptr)
}
}
pub fn as_str(&self) -> &'static str {
self.as_cstr().to_str().unwrap()
}
}
impl Display for Rs2TimestampDomain {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}
#[cfg(test)]
mod tests {
use super::*;
use num_traits::FromPrimitive;
#[test]
fn all_variants_exist() {
for i in 0..sys::rs2_timestamp_domain_RS2_TIMESTAMP_DOMAIN_COUNT as i32 {
assert!(
Rs2TimestampDomain::from_i32(i).is_some(),
"Rs2TimestampDomain variant for ordinal {} does not exist.",
i,
);
}
}
}