mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
Some checks are pending
Cachix / Publish Flake (push) Waiting to run
Check / clippy (push) Waiting to run
Check / rustfmt (push) Waiting to run
Check / stylua (push) Waiting to run
Draft / build-unix (gcc-aarch64-linux-gnu, ubuntu-latest, aarch64-unknown-linux-gnu) (push) Waiting to run
Draft / build-unix (gcc-i686-linux-gnu, ubuntu-latest, i686-unknown-linux-gnu) (push) Waiting to run
Draft / build-unix (gcc-riscv64-linux-gnu, ubuntu-latest, riscv64gc-unknown-linux-gnu) (push) Waiting to run
Draft / build-unix (gcc-sparc64-linux-gnu, ubuntu-latest, sparc64-unknown-linux-gnu) (push) Waiting to run
Draft / build-unix (macos-latest, aarch64-apple-darwin) (push) Waiting to run
Draft / build-unix (macos-latest, x86_64-apple-darwin) (push) Waiting to run
Draft / build-unix (ubuntu-latest, x86_64-unknown-linux-gnu) (push) Waiting to run
Draft / build-windows (windows-latest, aarch64-pc-windows-msvc) (push) Waiting to run
Draft / build-windows (windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Draft / build-musl (aarch64-unknown-linux-musl) (push) Waiting to run
Draft / build-musl (x86_64-unknown-linux-musl) (push) Waiting to run
Draft / build-snap (amd64, ubuntu-latest) (push) Waiting to run
Draft / build-snap (arm64, ubuntu-24.04-arm) (push) Waiting to run
Draft / snap (push) Blocked by required conditions
Draft / draft (push) Blocked by required conditions
Draft / nightly (push) Blocked by required conditions
Test / test (macos-latest) (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
Test / test (windows-latest) (push) Waiting to run
36 lines
827 B
Rust
36 lines
827 B
Rust
use std::vec;
|
|
|
|
use mlua::{FromLua, Lua, Value};
|
|
|
|
use super::TrashNode;
|
|
|
|
pub struct TrashNodes(Vec<TrashNode>);
|
|
|
|
impl TrashNodes {
|
|
fn new(mut nodes: Vec<TrashNode>) -> Self {
|
|
nodes.sort_unstable_by_key(|node| node.rel.components().count());
|
|
|
|
let mut seen = Vec::<TrashNode>::with_capacity(nodes.len());
|
|
for node in nodes {
|
|
if seen.iter().any(|parent| parent.top == node.top && node.rel.starts_with(&parent.rel)) {
|
|
continue;
|
|
}
|
|
seen.push(node);
|
|
}
|
|
Self(seen)
|
|
}
|
|
}
|
|
|
|
impl FromLua for TrashNodes {
|
|
fn from_lua(value: Value, lua: &Lua) -> mlua::Result<Self> {
|
|
let nodes = Vec::<TrashNode>::from_lua(value, lua)?;
|
|
Ok(Self::new(nodes))
|
|
}
|
|
}
|
|
|
|
impl IntoIterator for TrashNodes {
|
|
type IntoIter = vec::IntoIter<TrashNode>;
|
|
type Item = TrashNode;
|
|
|
|
fn into_iter(self) -> Self::IntoIter { self.0.into_iter() }
|
|
}
|