Skip to main content

changeset_operations/traits/
project_provider.rs

1use std::collections::HashMap;
2use std::path::{Path, PathBuf};
3
4use changeset_project::{
5    CargoProject, PackageChangesetConfig, RootChangesetConfig, WorkspaceDependencyGraph,
6};
7
8use crate::Result;
9
10pub trait ProjectProvider: Send + Sync {
11    /// # Errors
12    ///
13    /// Returns an error if no project can be found from the given path.
14    fn discover_project(&self, start_path: &Path) -> Result<CargoProject>;
15
16    /// # Errors
17    ///
18    /// Returns an error if the configuration files cannot be loaded.
19    fn load_configs(
20        &self,
21        project: &CargoProject,
22    ) -> Result<(RootChangesetConfig, HashMap<String, PackageChangesetConfig>)>;
23
24    /// # Errors
25    ///
26    /// Returns an error if the changeset directory cannot be created.
27    fn ensure_changeset_dir(
28        &self,
29        project: &CargoProject,
30        config: &RootChangesetConfig,
31    ) -> Result<PathBuf>;
32}
33
34pub trait DependencyGraphProvider: Send + Sync {
35    /// # Errors
36    ///
37    /// Returns an error if the dependency graph cannot be built from the project manifests.
38    fn build_dependency_graph(&self, project: &CargoProject) -> Result<WorkspaceDependencyGraph>;
39}