workspacer_interface/
workspace_interface.rs

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