use num_derive::{FromPrimitive, ToPrimitive};
use realsense_sys as sys;
#[repr(i32)]
#[derive(FromPrimitive, ToPrimitive, Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Rs2StreamKind {
Any = sys::rs2_stream_RS2_STREAM_ANY as i32,
Depth = sys::rs2_stream_RS2_STREAM_DEPTH as i32,
Color = sys::rs2_stream_RS2_STREAM_COLOR as i32,
Infrared = sys::rs2_stream_RS2_STREAM_INFRARED as i32,
Fisheye = sys::rs2_stream_RS2_STREAM_FISHEYE as i32,
Gyro = sys::rs2_stream_RS2_STREAM_GYRO as i32,
Accel = sys::rs2_stream_RS2_STREAM_ACCEL as i32,
Gpio = sys::rs2_stream_RS2_STREAM_GPIO as i32,
Pose = sys::rs2_stream_RS2_STREAM_POSE as i32,
Confidence = sys::rs2_stream_RS2_STREAM_CONFIDENCE as i32,
Motion = sys::rs2_stream_RS2_STREAM_MOTION as i32,
}
impl std::fmt::Display for Rs2StreamKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let string = match self {
Rs2StreamKind::Any => "Any",
Rs2StreamKind::Depth => "Depth",
Rs2StreamKind::Color => "Color",
Rs2StreamKind::Infrared => "Infrared",
Rs2StreamKind::Fisheye => "Fisheye",
Rs2StreamKind::Gyro => "Gyro",
Rs2StreamKind::Accel => "Accel",
Rs2StreamKind::Gpio => "Gpio",
Rs2StreamKind::Pose => "Pose",
Rs2StreamKind::Confidence => "Confidence",
Rs2StreamKind::Motion => "Motion",
};
write!(f, "{}", string)
}
}
#[cfg(test)]
mod tests {
use super::*;
use num_traits::FromPrimitive;
#[test]
fn all_variants_exist() {
for i in 0..sys::rs2_stream_RS2_STREAM_COUNT as i32 {
assert!(
Rs2StreamKind::from_i32(i).is_some(),
"Rs2StreamKind variant for ordinal {} does not exist.",
i,
);
}
}
}