@@ -135,6 +135,7 @@ const BINDGEN_FILE_GENERATORS_TUPLES: &[(&str, GenerateFn)] = &[
135135 ( "hid.rs" , generate_hid) ,
136136 ( "parallel_ports.rs" , generate_parallel_ports) ,
137137 ( "spb.rs" , generate_spb) ,
138+ ( "storage.rs" , generate_storage) ,
138139] ;
139140
140141fn initialize_tracing ( ) -> Result < ( ) , ParseError > {
@@ -205,6 +206,8 @@ fn generate_constants(out_path: &Path, config: &Config) -> Result<(), ConfigErro
205206 ApiSubset :: Spb ,
206207 #[ cfg( feature = "parallel-ports" ) ]
207208 ApiSubset :: ParallelPorts ,
209+ #[ cfg( feature = "storage" ) ]
210+ ApiSubset :: Storage ,
208211 ] ) ;
209212 trace ! ( header_contents = ?header_contents) ;
210213
@@ -233,6 +236,8 @@ fn generate_types(out_path: &Path, config: &Config) -> Result<(), ConfigError> {
233236 ApiSubset :: Spb ,
234237 #[ cfg( feature = "parallel-ports" ) ]
235238 ApiSubset :: ParallelPorts ,
239+ #[ cfg( feature = "storage" ) ]
240+ ApiSubset :: Storage ,
236241 ] ) ;
237242 trace ! ( header_contents = ?header_contents) ;
238243
@@ -445,6 +450,45 @@ fn generate_spb(out_path: &Path, config: &Config) -> Result<(), ConfigError> {
445450 }
446451}
447452
453+ fn generate_storage ( out_path : & Path , config : & Config ) -> Result < ( ) , ConfigError > {
454+ cfg_if:: cfg_if! {
455+ if #[ cfg( feature = "storage" ) ] {
456+ info!( "Generating bindings to WDK: storage.rs" ) ;
457+
458+ let header_contents = config. bindgen_header_contents( [
459+ ApiSubset :: Base ,
460+ ApiSubset :: Wdf ,
461+ ApiSubset :: Storage ,
462+ ] ) ;
463+ trace!( header_contents = ?header_contents) ;
464+
465+ let bindgen_builder = {
466+ let mut builder = bindgen:: Builder :: wdk_default( config) ?
467+ . with_codegen_config( ( CodegenConfig :: TYPES | CodegenConfig :: VARS ) . complement( ) )
468+ . header_contents( "storage-input.h" , & header_contents) ;
469+
470+ // Only allowlist files in the storage-specific files to avoid
471+ // duplicate definitions
472+ for header_file in config. headers( ApiSubset :: Storage ) {
473+ builder = builder. allowlist_file( format!( "(?i).*{header_file}.*" ) ) ;
474+ }
475+ builder
476+ } ;
477+ trace!( bindgen_builder = ?bindgen_builder) ;
478+
479+ Ok ( bindgen_builder
480+ . generate( )
481+ . expect( "Bindings should succeed to generate" )
482+ . write_to_file( out_path. join( "storage.rs" ) ) ?)
483+ } else {
484+ let _ = ( out_path, config) ; // Silence unused variable warnings when storage feature is not enabled
485+
486+ info!( "Skipping storage.rs generation since storage feature is not enabled" ) ;
487+ Ok ( ( ) )
488+ }
489+ }
490+ }
491+
448492/// Generates a `wdf_function_count.rs` file in `OUT_DIR` which contains the
449493/// definition of the function `get_wdf_function_count()`. This is required to
450494/// be generated here since the size of the table is derived from either a
0 commit comments