rpack_egui 0.6.0

GUI application for generating rpack atlases
#[cfg(not(target_arch = "wasm32"))]
use std::path::PathBuf;

use image::DynamicImage;
use texture_packer::importer::ImageImporter;

use crate::app::AppImageData;

#[cfg(not(target_arch = "wasm32"))]
pub const IMAGE_EXTENSIONS: [&str; 4] = ["png", "jpg", "jpeg", "dds"];

pub trait DroppedFileHelper {
    fn file_path(&self) -> String;
    fn create_image<P>(&self, prefix: P) -> Option<AppImageData>
    where
        P: AsRef<str>,
    {
        let path = self.file_path();
        let base_id = rpack_cli::packing::frame_key(&path);

        let id = base_id
            .strip_prefix(prefix.as_ref())
            .unwrap_or(&base_id)
            .to_owned();

        Some(AppImageData::new(path, id, self.dynamic_image()?))
    }
    fn dynamic_image(&self) -> Option<DynamicImage>;
}

impl DroppedFileHelper for (Vec<u8>, String) {
    fn file_path(&self) -> String {
        self.1.clone()
    }

    fn dynamic_image(&self) -> Option<DynamicImage> {
        ImageImporter::import_from_memory(&self.0).ok()
    }
}
#[cfg(not(target_arch = "wasm32"))]
impl DroppedFileHelper for PathBuf {
    fn file_path(&self) -> String {
        self.display().to_string()
    }

    fn dynamic_image(&self) -> Option<DynamicImage> {
        ImageImporter::import_from_file(self.as_path()).ok()
    }
}