use naga_oil::compose::preprocess::Preprocessor;
use naga_oil::compose::{
ComposableModuleDefinition, ComposableModuleDescriptor, Composer, ComposerError, ErrSource,
};
pub trait ComposerExt {
fn add_composable_module_once(
&mut self,
desc: ComposableModuleDescriptor<'_>,
) -> Result<Option<&ComposableModuleDefinition>, ComposerError>;
}
impl ComposerExt for Composer {
fn add_composable_module_once(
&mut self,
desc: ComposableModuleDescriptor<'_>,
) -> Result<Option<&ComposableModuleDefinition>, ComposerError> {
let prep = Preprocessor::default();
let meta = prep
.get_preprocessor_metadata(desc.source, false)
.map_err(|inner| ComposerError {
inner,
source: ErrSource::Constructing {
path: desc.file_path.to_string(),
source: desc.source.to_string(),
offset: 0,
},
})?;
if let Some(name) = &meta.name {
if self.contains_module(name) {
return Ok(None);
}
}
self.add_composable_module(desc).map(Some)
}
}