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