workspacer_interface/
workspace_interface.rs

1// ---------------- [ File: workspacer-interface/src/workspace_interface.rs ]
2crate::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}