diff options
author | Toby Vincent <tobyv13@gmail.com> | 2022-11-29 00:07:33 -0600 |
---|---|---|
committer | Toby Vincent <tobyv13@gmail.com> | 2022-11-29 00:23:45 -0600 |
commit | 09f51336df00b38928c4b42782687012b9bfae39 (patch) | |
tree | 743257228256e81ed28783b4fb316bbff5939c65 /src/project.rs | |
parent | da884530e2b3e0b9a5bef9abcf683a970b93bd6b (diff) |
feat: create `ProjectParserGroup` to group parsers
Diffstat (limited to 'src/project.rs')
-rw-r--r-- | src/project.rs | 15 |
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; } |