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+ 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}