blackjack/
file.rs

1// Copyright 2024 Ole Kliemann
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::error::Result;
5use std::path::{Path, PathBuf};
6use tokio::fs;
7
8pub async fn read_yaml_files(dirname: PathBuf) -> Result<String> {
9    log::debug!("read_yaml_files: {dirname:?}");
10    let mut combined = String::new();
11    let mut entries: Vec<_> = list_files(&dirname)
12        .await?
13        .into_iter()
14        .filter(|path| {
15            path.extension()
16                .map(|ext| ext.to_string_lossy().eq_ignore_ascii_case("yaml"))
17                .unwrap_or(false)
18        })
19        .collect();
20
21    entries.sort();
22
23    log::debug!("entries: {entries:?}");
24
25    let mut first = true;
26
27    for path in entries {
28        let content = fs::read_to_string(&path).await?;
29
30        if !first {
31            combined.push_str("---\n");
32        } else {
33            first = false;
34        }
35
36        combined.push_str(&content);
37        combined.push('\n');
38    }
39
40    log::debug!("returning: ...");
41    Ok(combined)
42}
43
44pub async fn list_directories(dirname: &PathBuf) -> Result<Vec<PathBuf>> {
45    let root = Path::new(dirname);
46    let mut dir = fs::read_dir(root).await?;
47    let mut result: Vec<PathBuf> = vec![];
48    while let Some(entry) = dir.next_entry().await? {
49        let path = entry.path();
50        if path.is_dir() {
51            result.push(path);
52        }
53    }
54    Ok(result)
55}
56
57pub async fn list_files(dirname: &PathBuf) -> Result<Vec<PathBuf>> {
58    log::debug!("list_files: {dirname:?}");
59    let root = Path::new(dirname);
60    let mut dir = fs::read_dir(root).await?;
61    let mut result: Vec<PathBuf> = vec![];
62    while let Some(entry) = dir.next_entry().await? {
63        log::debug!("found: {dirname:?}");
64        let path = entry.path();
65        if path.is_file() {
66            result.push(path);
67        }
68    }
69    log::debug!("returning: {result:?}");
70    Ok(result)
71}