argui-image 0.2.1

Image decoding, caching and resource management for Argui
Documentation
use argui_image::{ImageLibrary, decode};
use argui_paint::ImageId;
use image::ImageEncoder;

#[test]
fn decodes_png_to_renderer_neutral_rgba() {
    let mut png = Vec::new();
    image::codecs::png::PngEncoder::new(&mut png)
        .write_image(&[255, 0, 0, 255], 1, 1, image::ExtendedColorType::Rgba8)
        .unwrap();
    let asset = decode(ImageId(7), &png).unwrap();
    assert_eq!((asset.id, asset.width, asset.height), (ImageId(7), 1, 1));
    assert_eq!(&*asset.rgba8, &[255, 0, 0, 255]);
}

#[test]
fn rejects_unknown_encoded_data() {
    assert!(decode(ImageId(1), b"not an image").is_err());
}

#[test]
fn library_generates_distinct_handles_and_retains_assets() {
    let mut png = Vec::new();
    image::codecs::png::PngEncoder::new(&mut png)
        .write_image(&[0, 255, 0, 255], 1, 1, image::ExtendedColorType::Rgba8)
        .unwrap();
    let mut library = ImageLibrary::new();
    let first = library.insert(&png).unwrap();
    let second = library.insert(&png).unwrap();

    assert_ne!(first, second);
    assert_eq!(library.assets().len(), 2);
    assert_eq!(library.assets()[0].id, first);
    assert_eq!(library.assets()[1].id, second);
}