@@ -11,7 +11,7 @@ use crate::{SpirvBuilder, SpirvBuilderError, leaf_deps};
1111
1212impl SpirvBuilder {
1313 /// Watches the module for changes, rebuilding it upon them.
14- pub fn watch ( & self ) -> Result < SpirvWatcher < & Self > , SpirvBuilderError > {
14+ pub fn watch ( self ) -> Result < SpirvWatcher , SpirvBuilderError > {
1515 SpirvWatcher :: new ( self )
1616 }
1717}
@@ -20,25 +20,24 @@ type WatchedPaths = HashSet<PathBuf>;
2020
2121/// Watcher of a crate which rebuilds it on changes.
2222#[ derive( Debug ) ]
23- pub struct SpirvWatcher < B > {
24- builder : B ,
23+ pub struct SpirvWatcher {
24+ builder : SpirvBuilder ,
2525 watcher : RecommendedWatcher ,
2626 rx : Receiver < ( ) > ,
27+ /// `first_result`: the path to the crate
28+ /// `!first_result`: the path to our metadata file with entry point names and file paths
2729 watch_path : PathBuf ,
2830 watched_paths : WatchedPaths ,
2931 first_result : bool ,
3032}
3133
32- impl < B > SpirvWatcher < B >
33- where
34- B : AsRef < SpirvBuilder > ,
35- {
36- fn new ( as_builder : B ) -> Result < Self , SpirvBuilderError > {
37- let builder = as_builder. as_ref ( ) ;
34+ impl SpirvWatcher {
35+ fn new ( builder : SpirvBuilder ) -> Result < Self , SpirvBuilderError > {
3836 let path_to_crate = builder
3937 . path_to_crate
4038 . as_ref ( )
41- . ok_or ( SpirvBuilderError :: MissingCratePath ) ?;
39+ . ok_or ( SpirvBuilderError :: MissingCratePath ) ?
40+ . clone ( ) ;
4241 if !matches ! ( builder. print_metadata, crate :: MetadataPrintout :: None ) {
4342 return Err ( SpirvWatcherError :: WatchWithPrintMetadata . into ( ) ) ;
4443 }
6362 . map_err ( SpirvWatcherError :: NotifyFailed ) ?;
6463
6564 Ok ( Self {
66- watch_path : path_to_crate. clone ( ) ,
67- builder : as_builder ,
65+ watch_path : path_to_crate,
66+ builder,
6867 watcher,
6968 rx,
7069 watched_paths : HashSet :: new ( ) ,
@@ -82,17 +81,15 @@ where
8281 }
8382
8483 self . rx . recv ( ) . expect ( "watcher should be alive" ) ;
85- let builder = self . builder . as_ref ( ) ;
86- let metadata_file = crate :: invoke_rustc ( builder) ?;
87- let result = builder. parse_metadata_file ( & metadata_file) ?;
84+ let metadata_file = crate :: invoke_rustc ( & self . builder ) ?;
85+ let result = self . builder . parse_metadata_file ( & metadata_file) ?;
8886
8987 Self :: watch_leaf_deps ( & self . watch_path , & mut self . watched_paths , & mut self . watcher ) ?;
9088 Ok ( result)
9189 }
9290
9391 fn recv_first_result ( & mut self ) -> Result < CompileResult , SpirvBuilderError > {
94- let builder = self . builder . as_ref ( ) ;
95- let metadata_file = match crate :: invoke_rustc ( builder) {
92+ let metadata_file = match crate :: invoke_rustc ( & self . builder ) {
9693 Ok ( path) => path,
9794 Err ( err) => {
9895 log:: error!( "{err}" ) ;
@@ -103,7 +100,7 @@ where
103100 . map_err ( SpirvWatcherError :: NotifyFailed ) ?;
104101 let path = loop {
105102 self . rx . recv ( ) . expect ( "watcher should be alive" ) ;
106- match crate :: invoke_rustc ( builder) {
103+ match crate :: invoke_rustc ( & self . builder ) {
107104 Ok ( path) => break path,
108105 Err ( err) => log:: error!( "{err}" ) ,
109106 }
@@ -114,7 +111,7 @@ where
114111 path
115112 }
116113 } ;
117- let result = builder. parse_metadata_file ( & metadata_file) ?;
114+ let result = self . builder . parse_metadata_file ( & metadata_file) ?;
118115
119116 Self :: watch_leaf_deps ( & metadata_file, & mut self . watched_paths , & mut self . watcher ) ?;
120117 self . watch_path = metadata_file;
@@ -139,23 +136,6 @@ where
139136 }
140137}
141138
142- impl < B > SpirvWatcher < B >
143- where
144- B : AsRef < SpirvBuilder > ,
145- {
146- #[ inline]
147- pub fn forget_lifetime ( self ) -> SpirvWatcher < SpirvBuilder > {
148- SpirvWatcher {
149- builder : self . builder . as_ref ( ) . clone ( ) ,
150- watcher : self . watcher ,
151- rx : self . rx ,
152- watch_path : self . watch_path ,
153- watched_paths : self . watched_paths ,
154- first_result : self . first_result ,
155- }
156- }
157- }
158-
159139#[ derive( Debug , thiserror:: Error ) ]
160140pub enum SpirvWatcherError {
161141 #[ error( "watching within build scripts will prevent build completion" ) ]
0 commit comments