Skip to content

Commit 1c65108

Browse files
committed
fix get_deps() implementation --WIP
1 parent 5a9ec69 commit 1c65108

File tree

3 files changed

+73
-48
lines changed

3 files changed

+73
-48
lines changed

src/onefetch/dependencies.rs

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
use {
2+
crate::onefetch::error::*,
3+
std::collections::HashMap,
4+
std::{ffi::OsStr, fs},
5+
};
6+
7+
pub enum PackageManager {
8+
Npm,
9+
}
10+
11+
impl std::fmt::Display for PackageManager {
12+
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
13+
match *self {
14+
PackageManager::Npm => write!(f, "Npm"),
15+
}
16+
}
17+
}
18+
19+
type DependencyParser = fn(&str) -> Option<i32>;
20+
21+
struct Detector {
22+
package_managers: HashMap<String, (DependencyParser, PackageManager)>,
23+
}
24+
25+
fn npm(contents: &str) -> Option<i32> {
26+
Some(0)
27+
}
28+
29+
impl Detector {
30+
pub fn new(&self) -> Detector {
31+
let mut package_managers: HashMap<String, (DependencyParser, PackageManager)> =
32+
HashMap::new();
33+
package_managers.insert(String::from("package.json"), (npm, PackageManager::Npm));
34+
35+
Detector { package_managers }
36+
}
37+
38+
pub fn get_dep_count(&self, dir: &str) -> Result<String> {
39+
fn is_package_file(detector: &Detector, file_name: &str) -> bool {
40+
detector
41+
.package_managers
42+
.iter()
43+
.any(|(package_manager_file_name, _)| {
44+
file_name.starts_with(package_manager_file_name)
45+
})
46+
}
47+
48+
let package_files = fs::read_dir(dir)
49+
.chain_err(|| "Could not read directory")?
50+
.filter_map(std::result::Result::ok)
51+
.map(|entry| entry.path())
52+
.filter(|entry| {
53+
entry.is_file()
54+
&& entry
55+
.file_name()
56+
.map(OsStr::to_string_lossy)
57+
.map(|s| is_package_file(&self, s.as_ref()))
58+
.unwrap_or_default()
59+
})
60+
.map(|entry| {
61+
let (parser, package_manager) =
62+
&self.package_managers[entry.file_name().unwrap().to_str().unwrap()];
63+
let contents = fs::read_to_string(entry).unwrap_or_default();
64+
format!("{} ({})", parser(&contents).unwrap(), package_manager)
65+
})
66+
.collect::<Vec<_>>();
67+
68+
let output = package_files.join(", ");
69+
70+
Ok(output)
71+
}
72+
}

src/onefetch/deps.rs

-48
This file was deleted.

src/onefetch/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ pub mod ascii_art;
22
pub mod cli;
33
pub mod cli_utils;
44
pub mod commit_info;
5+
pub mod dependencies;
56
pub mod error;
67
pub mod image_backends;
78
pub mod info;

0 commit comments

Comments
 (0)