Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 17 additions & 51 deletions crates/bevy_asset/src/server/loaders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,18 +154,11 @@ impl AssetLoaders {
/// Find an [`AssetLoader`] based on provided search criteria
pub(crate) fn find(
&self,
type_name: Option<&str>,
asset_type_id: Option<TypeId>,
extension: Option<&str>,
asset_path: Option<&AssetPath<'_>>,
asset_path: &AssetPath<'_>,
) -> Option<MaybeAssetLoader> {
// If provided the type name of the loader, return that immediately
if let Some(type_name) = type_name {
return self.get_by_name(type_name);
}

// The presence of a label will affect loader choice
let label = asset_path.as_ref().and_then(|path| path.label());
let label = asset_path.label();

// Try by asset type
let candidates = if let Some(type_id) = asset_type_id {
Expand Down Expand Up @@ -207,15 +200,8 @@ impl AssetLoaders {
}
};

// Try the provided extension
if let Some(extension) = extension
&& let Some(&index) = try_extension(extension)
{
return self.get_by_index(index);
}

// Try extracting the extension from the path
if let Some(full_extension) = asset_path.and_then(AssetPath::get_full_extension) {
if let Some(full_extension) = asset_path.get_full_extension() {
if let Some(&index) = try_extension(full_extension) {
return self.get_by_index(index);
}
Expand All @@ -236,15 +222,15 @@ impl AssetLoaders {
{
Some(loader) => {
warn!(
"Multiple AssetLoaders found for Asset: {:?}; Path: {:?}; Extension: {:?}",
asset_type_id, asset_path, extension
"Multiple AssetLoaders found for Asset: {:?}; Path: {:?};",
asset_type_id, asset_path
);
Some(loader)
}
None => {
warn!(
"No AssetLoader found for Asset: {:?}; Path: {:?}; Extension: {:?}",
asset_type_id, asset_path, extension
"No AssetLoader found for Asset: {:?}; Path: {:?};",
asset_type_id, asset_path
);
None
}
Expand Down Expand Up @@ -597,10 +583,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<A>()),
None,
Some(&AssetPath::from_path(Path::new("asset.a"))),
&AssetPath::from_path(Path::new("asset.a")),
)
.unwrap()
.get(),
Expand All @@ -618,10 +602,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<B>()),
None,
Some(&AssetPath::from_path(Path::new("asset.b"))),
&AssetPath::from_path(Path::new("asset.b")),
)
.unwrap()
.get(),
Expand All @@ -639,10 +621,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<C>()),
None,
Some(&AssetPath::from_path(Path::new("asset.c"))),
&AssetPath::from_path(Path::new("asset.c")),
)
.unwrap()
.get(),
Expand All @@ -662,10 +642,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<C>()),
None,
Some(&AssetPath::from_path(Path::new("asset.a"))),
&AssetPath::from_path(Path::new("asset.a")),
)
.unwrap()
.get(),
Expand All @@ -683,10 +661,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<C>()),
None,
Some(&AssetPath::from_path(Path::new("asset.b"))),
&AssetPath::from_path(Path::new("asset.b")),
)
.unwrap()
.get(),
Expand All @@ -706,10 +682,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<A>()),
None,
Some(&AssetPath::from_path(Path::new("asset.x"))),
&AssetPath::from_path(Path::new("asset.x")),
)
.unwrap()
.get(),
Expand All @@ -727,10 +701,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<A>()),
None,
Some(&AssetPath::from_path(Path::new("asset"))),
&AssetPath::from_path(Path::new("asset")),
)
.unwrap()
.get(),
Expand Down Expand Up @@ -766,10 +738,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<A>()),
None,
Some(&AssetPath::from_path(Path::new("asset.a"))),
&AssetPath::from_path(Path::new("asset.a")),
)
.unwrap()
.get(),
Expand All @@ -785,10 +755,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<A>()),
None,
Some(&AssetPath::from_path(Path::new("asset.x"))),
&AssetPath::from_path(Path::new("asset.x")),
)
.unwrap()
.get(),
Expand All @@ -804,10 +772,8 @@ mod tests {
let loader = block_on(
loaders
.find(
None,
Some(TypeId::of::<A>()),
None,
Some(&AssetPath::from_path(Path::new("asset"))),
&AssetPath::from_path(Path::new("asset")),
)
.unwrap()
.get(),
Expand Down
24 changes: 6 additions & 18 deletions crates/bevy_asset/src/server/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1554,16 +1554,11 @@ impl AssetServer {
}
Err(AssetReaderError::NotFound(_)) => {
// TODO: Handle error transformation
let loader = {
self.read_loaders()
.find(None, asset_type_id, None, Some(asset_path))
};
let loader = { self.read_loaders().find(asset_type_id, asset_path) };

let error = || AssetLoadError::MissingAssetLoader {
loader_name: None,
asset_type_id,
extension: None,
asset_path: Some(asset_path.to_string()),
asset_path: asset_path.to_string(),
};

let loader = loader.ok_or_else(error)?.get().await.map_err(|_| error())?;
Expand All @@ -1574,16 +1569,11 @@ impl AssetServer {
Err(err) => return Err(err.into()),
}
} else {
let loader = {
self.read_loaders()
.find(None, asset_type_id, None, Some(asset_path))
};
let loader = { self.read_loaders().find(asset_type_id, asset_path) };

let error = || AssetLoadError::MissingAssetLoader {
loader_name: None,
asset_type_id,
extension: None,
asset_path: Some(asset_path.to_string()),
asset_path: asset_path.to_string(),
};

let loader = loader.ok_or_else(error)?.get().await.map_err(|_| error())?;
Expand Down Expand Up @@ -2110,12 +2100,10 @@ pub enum AssetLoadError {
actual_asset_name: &'static str,
loader_name: &'static str,
},
#[error("Could not find an asset loader matching: Loader Name: {loader_name:?}; Asset Type: {asset_type_id:?}; Extension: {extension:?}; Path: {asset_path:?};")]
#[error("Could not find an asset loader matching: Asset Type: {asset_type_id:?}; Path: {asset_path:?};")]
MissingAssetLoader {
loader_name: Option<String>,
asset_type_id: Option<TypeId>,
extension: Option<String>,
asset_path: Option<String>,
asset_path: String,
},
#[error(transparent)]
MissingAssetLoaderForExtension(#[from] MissingAssetLoaderForExtensionError),
Expand Down