1use 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}