Skip to main content

poe_data_tools_cli/commands/
list.rs

1use std::io::{self, BufWriter, Write};
2
3use anyhow::{Context, Result};
4use glob::{MatchOptions, Pattern};
5use poe_data_tools::fs::{FS, FileSystem};
6
7/// List filenames matching a glob pattern
8pub fn list_files(file_system: &FS, patterns: &[Pattern]) -> Result<()> {
9    // Use a buffered writer since we're dumping a lot of data
10    let mut stdout = BufWriter::new(io::stdout().lock());
11
12    file_system
13        .list()
14        .filter(|path| {
15            patterns.iter().any(|pattern| {
16                pattern.matches_with(
17                    path,
18                    MatchOptions {
19                        require_literal_separator: true,
20                        ..Default::default()
21                    },
22                )
23            })
24        })
25        .try_for_each(|p| writeln!(stdout, "{}", p).context("Failed to write to stdout"))?;
26
27    stdout.flush().context("Failed to flush stdout")
28}