changeset_operations/providers/
project.rs1use 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}