Skip to main content

changeset_operations/providers/
project.rs

1use std::collections::HashMap;
2use std::path::{Path, PathBuf};
3
4use changeset_project::{
5    CargoProject, PackageChangesetConfig, RootChangesetConfig, WorkspaceDependencyGraph,
6    discover_project, ensure_changeset_dir, load_changeset_configs,
7};
8
9use crate::Result;
10use crate::traits::{DependencyGraphProvider, ProjectProvider};
11
12pub struct FileSystemProjectProvider;
13
14impl FileSystemProjectProvider {
15    #[must_use]
16    pub fn new() -> Self {
17        Self
18    }
19}
20
21impl Default for FileSystemProjectProvider {
22    fn default() -> Self {
23        Self::new()
24    }
25}
26
27impl ProjectProvider for FileSystemProjectProvider {
28    fn discover_project(&self, start_path: &Path) -> Result<CargoProject> {
29        Ok(discover_project(start_path)?)
30    }
31
32    fn load_configs(
33        &self,
34        project: &CargoProject,
35    ) -> Result<(RootChangesetConfig, HashMap<String, PackageChangesetConfig>)> {
36        Ok(load_changeset_configs(project)?)
37    }
38
39    fn ensure_changeset_dir(
40        &self,
41        project: &CargoProject,
42        config: &RootChangesetConfig,
43    ) -> Result<PathBuf> {
44        Ok(ensure_changeset_dir(project, config)?)
45    }
46}
47
48impl DependencyGraphProvider for FileSystemProjectProvider {
49    fn build_dependency_graph(&self, project: &CargoProject) -> Result<WorkspaceDependencyGraph> {
50        Ok(WorkspaceDependencyGraph::build(project)?)
51    }
52}