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