workspacer_interface/
workspace_interface.rs1crate::ix!();
3
4pub trait WorkspaceInterface<P,T>
5: GetCrates<P,T>
6+ Send
7+ Sync
8+ NameAllFiles<Error=WorkspaceError>
9+ EnsureGitClean<Error=GitError>
10+ NumCrates
11+ PinAllWildcardDependencies<Error=WorkspaceError>
12+ CleanupWorkspace
13+ WatchAndReload
14+ RunTestsWithCoverage
15+ GetCargoMetadata
16+ RebuildOrTest
17+ Analyze
18+ GenerateDocs
19+ RunLinting
20+ DetectCircularDependencies
21+ GenerateDependencyTree
22+ ValidateIntegrity
23+ ReadyForCargoPublish<Error=WorkspaceError>
24+ AsyncTryFrom<P>
25+ AsyncPathValidator
26+ AsyncFindItems
27+ AsRef<Path>
28where
29for<'async_trait> P: From<PathBuf> + AsRef<Path> + Send + Sync + 'async_trait,
30T: CrateHandleInterface<P>
31{}
32
33#[async_trait]
34pub trait EnsureGitClean {
35 type Error;
36 async fn ensure_git_clean(&self) -> Result<(), Self::Error>;
37}
38
39#[async_trait]
40pub trait PinAllWildcardDependencies {
41 type Error;
42 async fn pin_all_wildcard_dependencies(&self) -> Result<(), Self::Error>;
43}
44
45pub trait GetCrates<P,T>
46where
47 for<'async_trait> P: From<PathBuf> + AsRef<Path> + Send + Sync + 'async_trait,
48 T: CrateHandleInterface<P>
49{
50 fn crates(&self) -> &[T];
51}
52
53pub trait NumCrates {
54 fn n_crates(&self) -> usize;
55}
56
57#[async_trait]
58pub trait CleanupWorkspace {
59
60 async fn cleanup_workspace(&self) -> Result<(), WorkspaceError>;
61}
62
63#[async_trait]
64pub trait WatchAndReload {
65
66 type Error;
67
68 async fn watch_and_reload(
69 &self,
70 tx: Option<mpsc::Sender<Result<(), WorkspaceError>>>,
71 runner: Arc<dyn CommandRunner + Send + Sync + 'static>,
72 cancel_token: CancellationToken,
73 ) -> Result<(), Self::Error>;
74
75 fn is_relevant_change(&self, path: &Path) -> bool;
76}
77
78#[async_trait]
79pub trait RunTestsWithCoverage {
80
81 type Report;
82 type Error;
83
84 async fn run_tests_with_coverage(&self)
85 -> Result<Self::Report, Self::Error>;
86}
87
88#[async_trait]
89pub trait GetCargoMetadata {
90
91 type Error;
92 async fn get_cargo_metadata(&self) -> Result<Metadata, Self::Error>;
93}
94
95#[async_trait]
96pub trait RebuildOrTest {
97
98 type Error;
99
100 async fn rebuild_or_test(&self, runner: &dyn CommandRunner) -> Result<(), Self::Error>;
101}
102
103#[async_trait]
104pub trait Analyze {
105 type Analysis;
106 type Error;
107
108 async fn analyze(&self) -> Result<Self::Analysis, Self::Error>;
109}
110
111#[async_trait]
112pub trait GenerateDocs {
113 type Error;
114 async fn generate_docs(&self) -> Result<(), Self::Error>;
115}
116
117#[async_trait]
118pub trait RunLinting {
119
120 type Report;
121 type Error;
122 async fn run_linting(&self) -> Result<Self::Report, Self::Error>;
123}
124
125#[async_trait]
126pub trait DetectCircularDependencies {
127
128 type Error;
129 async fn detect_circular_dependencies(&self) -> Result<(), Self::Error>;
130}
131
132#[async_trait]
133pub trait GenerateDependencyTree {
134
135 type Tree;
136 type Error;
137
138 async fn generate_dependency_tree(&self) -> Result<Self::Tree, Self::Error>;
139 async fn generate_dependency_tree_dot(&self) -> Result<String, Self::Error>;
140}