use std::ops::Deref;
use std::slice;
use crate::geometry::Point;
cpp_class!(
pub unsafe struct FaceLandmarks as "dlib::full_object_detection"
);
impl Deref for FaceLandmarks {
type Target = [Point];
fn deref(&self) -> &Self::Target {
let len = unsafe {
cpp!([self as "dlib::full_object_detection*"] -> usize as "size_t" {
return self->num_parts();
})
};
if len == 0 {
&[]
} else {
unsafe {
let pointer = cpp!([self as "dlib::full_object_detection*"] -> *const Point as "dlib::point*" {
return &self->part(0);
});
slice::from_raw_parts(pointer, len)
}
}
}
}
#[test]
fn test_default_landmarks() {
let landmarks = FaceLandmarks::default();
assert!(landmarks.is_empty());
assert_eq!(landmarks.len(), 0);
assert_eq!(landmarks.get(0), None);
}