summaryrefslogtreecommitdiffstats
path: root/src/project.rs
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-11-29 00:07:33 -0600
committerToby Vincent <tobyv13@gmail.com>2022-11-29 00:23:45 -0600
commit09f51336df00b38928c4b42782687012b9bfae39 (patch)
tree743257228256e81ed28783b4fb316bbff5939c65 /src/project.rs
parentda884530e2b3e0b9a5bef9abcf683a970b93bd6b (diff)
feat: create `ProjectParserGroup` to group parsers
Diffstat (limited to 'src/project.rs')
-rw-r--r--src/project.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/project.rs b/src/project.rs
index 5486dc1..18c2083 100644
--- a/src/project.rs
+++ b/src/project.rs
@@ -8,6 +8,17 @@ pub mod path;
#[cfg(feature = "git")]
pub mod git;
+pub type ProjectParserGroup = Vec<Box<dyn ProjectParser>>;
+
+pub trait ProjectParser {
+ fn parse(&self, path_buf: PathBuf) -> Option<ProjectItem>;
+}
+
+impl ProjectParser for ProjectParserGroup {
+ fn parse(&self, path_buf: std::path::PathBuf) -> Option<ProjectItem> {
+ self.iter().find_map(|p| p.parse(path_buf.to_owned()))
+ }
+}
pub type ProjectItem = Box<dyn Project>;
@@ -25,10 +36,6 @@ where
}
}
-pub trait ProjectParser {
- fn parse_project(&self, path_buf: PathBuf) -> Option<ProjectItem>;
-}
-
pub trait Timestamp {
fn timestamp(&self) -> &Duration;
}