bevy_sprinkles_editor 0.2.0

GPU particle system editor for Bevy
use std::env;
use std::path::{Path, PathBuf};

pub const MAX_DISPLAY_PATH_LEN: usize = 40;

pub fn truncate_path(path: &str, max_len: usize) -> String {
    let path = simplify_path(Path::new(path));
    if path.len() <= max_len {
        return path;
    }

    let sep = '/';
    let segments: Vec<&str> = path.split(sep).collect();
    if segments.len() <= 2 {
        return path;
    }

    let last = segments[segments.len() - 1];
    let ellipsis = "...";

    let mut prefix = String::new();
    for &seg in &segments[..segments.len() - 1] {
        let next_prefix = if prefix.is_empty() {
            seg.to_string()
        } else {
            format!("{prefix}{sep}{seg}")
        };
        if format!("{next_prefix}{sep}{ellipsis}{sep}{last}").len() > max_len {
            break;
        }
        prefix = next_prefix;
    }

    if prefix.is_empty() {
        format!("{ellipsis}{sep}{last}")
    } else {
        format!("{prefix}{sep}{ellipsis}{sep}{last}")
    }
}

pub fn simplify_path(path: &Path) -> String {
    #[cfg(unix)]
    if let Some(home) = env::var_os("HOME") {
        let home_path = PathBuf::from(home);
        if let Ok(relative) = path.strip_prefix(&home_path) {
            return format!("~/{}", relative.to_string_lossy());
        }
    }

    path.to_string_lossy().to_string()
}