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