diff --git a/lib/bsp_loader/src/loader.rs b/lib/bsp_loader/src/loader.rs index c7a03ee..8ade595 100644 --- a/lib/bsp_loader/src/loader.rs +++ b/lib/bsp_loader/src/loader.rs @@ -22,17 +22,17 @@ impl From<std::io::Error> for TextureError{ } } -pub struct TextureLoader<'a>(std::marker::PhantomData<&'a ()>); -impl TextureLoader<'_>{ +pub struct TextureLoader; +impl TextureLoader{ pub fn new()->Self{ - Self(std::marker::PhantomData) + Self } } -impl<'a> Loader for TextureLoader<'a>{ +impl Loader for TextureLoader{ type Error=TextureError; - type Index=Cow<'a,str>; + type Index<'a>=Cow<'a,str>; type Resource=Texture; - fn load(&mut self,index:Self::Index)->Result<Self::Resource,Self::Error>{ + fn load<'a>(&mut self,index:Self::Index<'a>)->Result<Self::Resource,Self::Error>{ let file_name=format!("textures/{}.dds",index); let mut file=std::fs::File::open(file_name)?; let mut data=Vec::new(); @@ -100,30 +100,24 @@ impl<'bsp,'vpk> BspFinder<'bsp,'vpk>{ } } -pub struct ModelLoader<'bsp,'vpk,'a>{ +pub struct ModelLoader<'bsp,'vpk>{ finder:BspFinder<'bsp,'vpk>, - life:core::marker::PhantomData<&'a ()>, } -impl ModelLoader<'_,'_,'_>{ +impl ModelLoader<'_,'_>{ #[inline] - pub const fn new<'bsp,'vpk,'a>( + pub const fn new<'bsp,'vpk>( finder:BspFinder<'bsp,'vpk>, - )->ModelLoader<'bsp,'vpk,'a>{ + )->ModelLoader<'bsp,'vpk>{ ModelLoader{ finder, - life:core::marker::PhantomData, } } } -impl<'bsp,'vpk,'a> Loader for ModelLoader<'bsp,'vpk,'a> - where - 'bsp:'a, - 'vpk:'a, -{ +impl<'bsp,'vpk> Loader for ModelLoader<'bsp,'vpk>{ type Error=MeshError; - type Index=&'a str; + type Index<'a>=&'a str where Self:'a; type Resource=vmdl::Model; - fn load(&mut self,index:Self::Index)->Result<Self::Resource,Self::Error>{ + fn load<'a>(&'a mut self,index:Self::Index<'a>)->Result<Self::Resource,Self::Error>{ let mdl_path_lower=index.to_lowercase(); //.mdl, .vvd, .dx90.vtx let path=std::path::PathBuf::from(mdl_path_lower.as_str()); @@ -143,31 +137,27 @@ impl<'bsp,'vpk,'a> Loader for ModelLoader<'bsp,'vpk,'a> } } -pub struct MeshLoader<'bsp,'vpk,'load,'a>{ +pub struct MeshLoader<'bsp,'vpk,'load,'str>{ finder:BspFinder<'bsp,'vpk>, - deferred_loader:&'load mut strafesnet_deferred_loader::deferred_loader::RenderConfigDeferredLoader<Cow<'a,str>>, + deferred_loader:&'load mut strafesnet_deferred_loader::deferred_loader::RenderConfigDeferredLoader<Cow<'str,str>>, } impl MeshLoader<'_,'_,'_,'_>{ #[inline] - pub const fn new<'bsp,'vpk,'load,'a>( + pub const fn new<'bsp,'vpk,'load,'str>( finder:BspFinder<'bsp,'vpk>, - deferred_loader:&'load mut strafesnet_deferred_loader::deferred_loader::RenderConfigDeferredLoader<Cow<'a,str>>, - )->MeshLoader<'bsp,'vpk,'load,'a>{ + deferred_loader:&'load mut strafesnet_deferred_loader::deferred_loader::RenderConfigDeferredLoader<Cow<'str,str>>, + )->MeshLoader<'bsp,'vpk,'load,'str>{ MeshLoader{ finder, deferred_loader } } } -impl<'bsp,'vpk,'load,'a> Loader for MeshLoader<'bsp,'vpk,'load,'a> - where - 'bsp:'a, - 'vpk:'a, -{ +impl<'str,'bsp,'vpk,'load> Loader for MeshLoader<'bsp,'vpk,'load,'str>{ type Error=MeshError; - type Index=&'a str; + type Index<'a>=&'a str where Self:'a; type Resource=Mesh; - fn load(&mut self,index:Self::Index)->Result<Self::Resource,Self::Error>{ + fn load<'a>(&'a mut self,index:Self::Index<'a>)->Result<Self::Resource,Self::Error>{ let model=ModelLoader::new(self.finder).load(index)?; let mesh=crate::mesh::convert_mesh(model,&mut self.deferred_loader); Ok(mesh) diff --git a/lib/deferred_loader/src/deferred_loader.rs b/lib/deferred_loader/src/deferred_loader.rs index 30597aa..4884230 100644 --- a/lib/deferred_loader/src/deferred_loader.rs +++ b/lib/deferred_loader/src/deferred_loader.rs @@ -45,7 +45,7 @@ impl<H:core::hash::Hash+Eq> RenderConfigDeferredLoader<H>{ pub fn into_indices(self)->impl Iterator<Item=H>{ self.render_config_id_from_asset_id.into_keys().flatten() } - pub fn into_render_configs<L:Loader<Resource=Texture,Index=H>>(mut self,loader:&mut L,failure_mode:LoadFailureMode)->Result<RenderConfigs,L::Error>{ + pub fn into_render_configs<'a,L:Loader<Resource=Texture,Index<'a>=H>+'a>(mut self,loader:&mut L,failure_mode:LoadFailureMode)->Result<RenderConfigs,L::Error>{ let mut sorted_textures=vec![None;self.texture_count as usize]; for (index_option,render_config_id) in self.render_config_id_from_asset_id{ let render_config=&mut self.render_configs[render_config_id.get() as usize]; @@ -93,7 +93,7 @@ impl<H:core::hash::Hash+Eq> MeshDeferredLoader<H>{ pub fn into_indices(self)->impl Iterator<Item=H>{ self.mesh_id_from_asset_id.into_keys() } - pub fn into_meshes<L:Loader<Resource=Mesh,Index=H>>(self,loader:&mut L,failure_mode:LoadFailureMode)->Result<Meshes,L::Error>{ + pub fn into_meshes<'a,L:Loader<Resource=Mesh,Index<'a>=H>+'a>(self,loader:&mut L,failure_mode:LoadFailureMode)->Result<Meshes,L::Error>{ let mut mesh_list=vec![None;self.mesh_id_from_asset_id.len()]; for (index,mesh_id) in self.mesh_id_from_asset_id{ let resource_result=loader.load(index); diff --git a/lib/deferred_loader/src/loader.rs b/lib/deferred_loader/src/loader.rs index adc9710..0359ffe 100644 --- a/lib/deferred_loader/src/loader.rs +++ b/lib/deferred_loader/src/loader.rs @@ -2,7 +2,7 @@ use std::error::Error; pub trait Loader{ type Error:Error; - type Index; + type Index<'a> where Self:'a; type Resource; - fn load(&mut self,index:Self::Index)->Result<Self::Resource,Self::Error>; + fn load<'a>(&mut self,index:Self::Index<'a>)->Result<Self::Resource,Self::Error>; } diff --git a/lib/rbx_loader/src/loader.rs b/lib/rbx_loader/src/loader.rs index ae41ec1..db86258 100644 --- a/lib/rbx_loader/src/loader.rs +++ b/lib/rbx_loader/src/loader.rs @@ -36,17 +36,17 @@ impl From<RobloxAssetIdParseErr> for TextureError{ } } -pub struct TextureLoader<'a>(std::marker::PhantomData<&'a ()>); -impl TextureLoader<'_>{ +pub struct TextureLoader; +impl TextureLoader{ pub fn new()->Self{ - Self(std::marker::PhantomData) + Self } } -impl<'a> Loader for TextureLoader<'a>{ +impl Loader for TextureLoader{ type Error=TextureError; - type Index=&'a str; + type Index<'a>=&'a str; type Resource=Texture; - fn load(&mut self,index:Self::Index)->Result<Self::Resource,Self::Error>{ + fn load<'a>(&mut self,index:Self::Index<'a>)->Result<Self::Resource,Self::Error>{ let RobloxAssetId(asset_id)=index.parse()?; let file_name=format!("textures/{}.dds",asset_id); let data=read_entire_file(file_name)?; @@ -138,17 +138,17 @@ impl MeshIndex<'_>{ } } -pub struct MeshLoader<'a>(std::marker::PhantomData<&'a ()>); -impl MeshLoader<'_>{ +pub struct MeshLoader; +impl MeshLoader{ pub fn new()->Self{ - Self(std::marker::PhantomData) + Self } } -impl<'a> Loader for MeshLoader<'a>{ +impl Loader for MeshLoader{ type Error=MeshError; - type Index=MeshIndex<'a>; + type Index<'a>=MeshIndex<'a>; type Resource=Mesh; - fn load(&mut self,index:Self::Index)->Result<Self::Resource,Self::Error>{ + fn load<'a>(&mut self,index:Self::Index<'a>)->Result<Self::Resource,Self::Error>{ let mesh=match index.mesh_type{ MeshType::FileMesh=>{ let RobloxAssetId(asset_id)=index.content.parse()?;