@@ -1318,20 +1318,22 @@ impl Composer {
1318
1318
& mut self ,
1319
1319
module_set : & ComposableModuleDefinition ,
1320
1320
shader_defs : & HashMap < String , ShaderDefValue > ,
1321
- ) -> Result < ComposableModule , ComposerError > {
1321
+ ) -> Result < ComposableModule , EnsureImportsError > {
1322
1322
let PreprocessOutput {
1323
1323
preprocessed_source,
1324
1324
imports,
1325
1325
} = self
1326
1326
. preprocessor
1327
1327
. preprocess ( & module_set. sanitized_source , shader_defs)
1328
- . map_err ( |inner| ComposerError {
1329
- inner,
1330
- source : ErrSource :: Module {
1331
- name : module_set. name . to_owned ( ) ,
1332
- offset : 0 ,
1333
- defs : shader_defs. clone ( ) ,
1334
- } ,
1328
+ . map_err ( |inner| {
1329
+ EnsureImportsError :: from ( ComposerError {
1330
+ inner,
1331
+ source : ErrSource :: Module {
1332
+ name : module_set. name . to_owned ( ) ,
1333
+ offset : 0 ,
1334
+ defs : shader_defs. clone ( ) ,
1335
+ } ,
1336
+ } )
1335
1337
} ) ?;
1336
1338
1337
1339
self . ensure_imports ( imports. iter ( ) . map ( |import| & import. definition ) , shader_defs) ?;
@@ -1346,17 +1348,19 @@ impl Composer {
1346
1348
& preprocessed_source,
1347
1349
imports,
1348
1350
)
1351
+ . map_err ( |err| err. into ( ) )
1349
1352
}
1350
1353
1351
1354
// build required ComposableModules for a given set of shader_defs
1352
1355
fn ensure_imports < ' a > (
1353
1356
& mut self ,
1354
1357
imports : impl IntoIterator < Item = & ' a ImportDefinition > ,
1355
1358
shader_defs : & HashMap < String , ShaderDefValue > ,
1356
- ) -> Result < ( ) , ComposerError > {
1359
+ ) -> Result < ( ) , EnsureImportsError > {
1357
1360
for ImportDefinition { import, .. } in imports. into_iter ( ) {
1358
- // we've already ensured imports exist when they were added
1359
- let module_set = self . module_sets . get ( import) . unwrap ( ) ;
1361
+ let Some ( module_set) = self . module_sets . get ( import) else {
1362
+ return Err ( EnsureImportsError :: MissingImport ( import. to_owned ( ) ) ) ;
1363
+ } ;
1360
1364
if module_set. get_module ( shader_defs) . is_some ( ) {
1361
1365
continue ;
1362
1366
}
@@ -1381,6 +1385,29 @@ impl Composer {
1381
1385
}
1382
1386
}
1383
1387
1388
+ pub enum EnsureImportsError {
1389
+ MissingImport ( String ) ,
1390
+ ComposerError ( ComposerError ) ,
1391
+ }
1392
+
1393
+ impl EnsureImportsError {
1394
+ fn into_composer_error ( self , err_source : ErrSource ) -> ComposerError {
1395
+ match self {
1396
+ EnsureImportsError :: MissingImport ( import) => ComposerError {
1397
+ inner : ComposerErrorInner :: ImportNotFound ( import. to_owned ( ) , 0 ) ,
1398
+ source : err_source,
1399
+ } ,
1400
+ EnsureImportsError :: ComposerError ( err) => err,
1401
+ }
1402
+ }
1403
+ }
1404
+
1405
+ impl From < ComposerError > for EnsureImportsError {
1406
+ fn from ( value : ComposerError ) -> Self {
1407
+ EnsureImportsError :: ComposerError ( value)
1408
+ }
1409
+ }
1410
+
1384
1411
#[ derive( Default ) ]
1385
1412
pub struct ComposableModuleDescriptor < ' a > {
1386
1413
pub source : & ' a str ,
@@ -1594,12 +1621,7 @@ impl Composer {
1594
1621
1595
1622
let sanitized_source = self . sanitize_and_set_auto_bindings ( source) ;
1596
1623
1597
- let PreprocessorMetaData {
1598
- name,
1599
- defines,
1600
- imports,
1601
- ..
1602
- } = self
1624
+ let PreprocessorMetaData { name, defines, .. } = self
1603
1625
. preprocessor
1604
1626
. get_preprocessor_metadata ( & sanitized_source, true )
1605
1627
. map_err ( |inner| ComposerError {
@@ -1614,6 +1636,18 @@ impl Composer {
1614
1636
1615
1637
let name = name. unwrap_or_default ( ) ;
1616
1638
1639
+ let PreprocessOutput { imports, .. } = self
1640
+ . preprocessor
1641
+ . preprocess ( & sanitized_source, & shader_defs)
1642
+ . map_err ( |inner| ComposerError {
1643
+ inner,
1644
+ source : ErrSource :: Constructing {
1645
+ path : file_path. to_owned ( ) ,
1646
+ source : sanitized_source. to_owned ( ) ,
1647
+ offset : 0 ,
1648
+ } ,
1649
+ } ) ?;
1650
+
1617
1651
// make sure imports have been added
1618
1652
// and gather additional defs specified at module level
1619
1653
for ( import_name, offset) in imports
@@ -1643,7 +1677,7 @@ impl Composer {
1643
1677
inner : ComposerErrorInner :: ImportNotFound ( import_name. clone ( ) , offset) ,
1644
1678
source : ErrSource :: Constructing {
1645
1679
path : file_path. to_owned ( ) ,
1646
- source : sanitized_source,
1680
+ source : sanitized_source. to_owned ( ) ,
1647
1681
offset : 0 ,
1648
1682
} ,
1649
1683
} ) ;
@@ -1652,8 +1686,22 @@ impl Composer {
1652
1686
self . ensure_imports (
1653
1687
imports. iter ( ) . map ( |import| & import. definition ) ,
1654
1688
& shader_defs,
1655
- ) ?;
1656
- self . ensure_imports ( additional_imports, & shader_defs) ?;
1689
+ )
1690
+ . map_err ( |err| {
1691
+ err. into_composer_error ( ErrSource :: Constructing {
1692
+ path : file_path. to_owned ( ) ,
1693
+ source : sanitized_source. to_owned ( ) ,
1694
+ offset : 0 ,
1695
+ } )
1696
+ } ) ?;
1697
+ self . ensure_imports ( additional_imports, & shader_defs)
1698
+ . map_err ( |err| {
1699
+ err. into_composer_error ( ErrSource :: Constructing {
1700
+ path : file_path. to_owned ( ) ,
1701
+ source : sanitized_source. to_owned ( ) ,
1702
+ offset : 0 ,
1703
+ } )
1704
+ } ) ?;
1657
1705
1658
1706
let definition = ComposableModuleDefinition {
1659
1707
name,
0 commit comments