apple-cf 0.7.0

Safe Rust bindings for Apple's shared Core* frameworks (CoreFoundation, CoreMedia, CoreVideo, CoreGraphics, IOSurface, Dispatch).
Documentation
use apple_cf::cf::CFString;
use apple_cf::cv::{CVAttachmentMode, CVBuffer, CVImageBuffer, CVMetalTextureCache, CVPixelBuffer};

#[test]
fn cv_buffer_attachment_round_trip() {
    let pixel_buffer = CVPixelBuffer::create(16, 16, 0x4247_5241).expect("pixel buffer");
    let buffer = CVBuffer::from_pixel_buffer(&pixel_buffer).expect("buffer");
    let key = CFString::new("com.doomfish.apple-cf.cv-buffer-tests");
    let value = CFString::new("attached");

    buffer.set_attachment(&key, &value, CVAttachmentMode::ShouldPropagate);
    assert!(buffer.attachment(&key).is_some());
    assert!(buffer
        .attachments(CVAttachmentMode::ShouldPropagate)
        .is_some());
    buffer.remove_all_attachments();
    assert!(buffer.attachment(&key).is_none());
}

#[test]
fn cv_image_buffer_smoke() {
    let pixel_buffer = CVPixelBuffer::create(8, 4, 0x4247_5241).expect("pixel buffer");
    let image_buffer = CVImageBuffer::from_pixel_buffer(&pixel_buffer).expect("image buffer");
    assert!((image_buffer.encoded_size().width - 8.0).abs() < f64::EPSILON);
    assert!((image_buffer.display_size().height - 4.0).abs() < f64::EPSILON);
}

#[test]
fn cv_metal_texture_cache_smoke() {
    let cache = CVMetalTextureCache::system_default().expect("system default Metal device");
    cache.flush();
}