@@ -34,14 +34,14 @@ pub struct Sysroot {
34
34
}
35
35
36
36
#[ derive( Debug , Clone , Eq , PartialEq ) ]
37
- pub ( crate ) enum SysrootWorkspace {
37
+ pub enum SysrootWorkspace {
38
38
Workspace ( CargoWorkspace ) ,
39
39
Stitched ( Stitched ) ,
40
40
Empty ,
41
41
}
42
42
43
43
#[ derive( Debug , Clone , Eq , PartialEq ) ]
44
- pub ( crate ) struct Stitched {
44
+ pub struct Stitched {
45
45
crates : Arena < SysrootCrateData > ,
46
46
}
47
47
@@ -227,18 +227,21 @@ impl Sysroot {
227
227
}
228
228
}
229
229
230
- pub fn load_workspace ( & mut self , sysroot_source_config : & SysrootSourceWorkspaceConfig ) {
230
+ pub fn load_workspace (
231
+ & self ,
232
+ sysroot_source_config : & SysrootSourceWorkspaceConfig ,
233
+ ) -> Option < SysrootWorkspace > {
231
234
assert ! ( matches!( self . workspace, SysrootWorkspace :: Empty ) , "workspace already loaded" ) ;
232
- let Self { root : _, src_root : Some ( src_root) , workspace, error : _ } = self else { return } ;
235
+ let Self { root : _, src_root : Some ( src_root) , workspace : _, error : _ } = self else {
236
+ return None ;
237
+ } ;
233
238
if let SysrootSourceWorkspaceConfig :: CargoMetadata ( cargo_config) = sysroot_source_config {
234
239
let library_manifest = ManifestPath :: try_from ( src_root. join ( "Cargo.toml" ) ) . unwrap ( ) ;
235
240
if fs:: metadata ( & library_manifest) . is_ok ( ) {
236
241
if let Some ( loaded) =
237
242
Self :: load_library_via_cargo ( library_manifest, src_root, cargo_config)
238
243
{
239
- * workspace = loaded;
240
- self . load_core_check ( ) ;
241
- return ;
244
+ return Some ( loaded) ;
242
245
}
243
246
}
244
247
}
@@ -286,11 +289,11 @@ impl Sysroot {
286
289
}
287
290
}
288
291
}
289
- * workspace = SysrootWorkspace :: Stitched ( stitched) ;
290
- self . load_core_check ( ) ;
292
+ Some ( SysrootWorkspace :: Stitched ( stitched) )
291
293
}
292
294
293
- fn load_core_check ( & mut self ) {
295
+ pub fn set_workspace ( & mut self , workspace : SysrootWorkspace ) {
296
+ self . workspace = workspace;
294
297
if self . error . is_none ( ) {
295
298
if let Some ( src_root) = & self . src_root {
296
299
let has_core = match & self . workspace {
0 commit comments