summaryrefslogtreecommitdiff
path: root/engine/src/asset.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/asset.rs')
-rw-r--r--engine/src/asset.rs55
1 files changed, 37 insertions, 18 deletions
diff --git a/engine/src/asset.rs b/engine/src/asset.rs
index dd8aa37..56b8a46 100644
--- a/engine/src/asset.rs
+++ b/engine/src/asset.rs
@@ -38,11 +38,12 @@ pub struct Label<'a>
impl Label<'_>
{
+ #[must_use]
pub fn to_owned(&self) -> LabelOwned
{
LabelOwned {
path: self.path.to_path_buf(),
- name: self.name.as_ref().map(|name| name.to_string()),
+ name: self.name.as_ref().map(std::string::ToString::to_string),
}
}
}
@@ -82,7 +83,7 @@ impl Display for Label<'_>
if let Some(name) = &self.name {
formatter.write_str("::")?;
- formatter.write_str(&name)?;
+ formatter.write_str(name)?;
}
Ok(())
@@ -98,6 +99,7 @@ pub struct LabelOwned
impl LabelOwned
{
+ #[must_use]
pub fn to_label(&self) -> Label<'_>
{
Label {
@@ -115,7 +117,7 @@ impl Display for LabelOwned
if let Some(name) = &self.name {
formatter.write_str("::")?;
- formatter.write_str(&name)?;
+ formatter.write_str(name)?;
}
Ok(())
@@ -125,7 +127,7 @@ impl Display for LabelOwned
#[derive(Debug, Sole)]
pub struct Assets
{
- assets: Vec<StoredAsset>,
+ store: Vec<StoredAsset>,
asset_lookup: RefCell<HashMap<LabelHash, LookupEntry>>,
importers: Vec<WrappedImporterFn>,
importer_lookup: HashMap<OsString, usize>,
@@ -137,13 +139,14 @@ pub struct Assets
impl Assets
{
+ #[must_use]
pub fn with_capacity(capacity: usize) -> Self
{
let (import_work_msg_sender, import_work_msg_receiver) =
mpsc_channel::<ImportWorkMessage>();
Self {
- assets: Vec::with_capacity(capacity),
+ store: Vec::with_capacity(capacity),
asset_lookup: RefCell::new(HashMap::with_capacity(capacity)),
importers: Vec::new(),
importer_lookup: HashMap::new(),
@@ -194,7 +197,9 @@ impl Assets
tracing::Span::current()
.record("asset_label", tracing::field::display(&asset_label));
- let stored_asset = self.assets.get(*asset_index).expect("Not possible");
+ let Some(stored_asset) = self.store.get(*asset_index) else {
+ unreachable!();
+ };
let Some(asset) = stored_asset.strong.downcast_ref::<Asset>() else {
tracing::error!("Wrong asset type");
@@ -220,12 +225,14 @@ impl Assets
return None;
};
- let stored_asset = self.assets.get(*asset_index).expect("Not possible");
+ let Some(stored_asset) = self.store.get(*asset_index) else {
+ unreachable!();
+ };
if stored_asset.strong.downcast_ref::<Asset>().is_none() {
tracing::error!("Wrong asset type");
return None;
- };
+ }
Some(Handle::new(label_hash))
}
@@ -243,7 +250,9 @@ impl Assets
return false;
};
- let stored_asset = self.assets.get(*asset_index).expect("Not possible");
+ let Some(stored_asset) = self.store.get(*asset_index) else {
+ unreachable!();
+ };
stored_asset.strong.downcast_ref::<Asset>().is_some()
}
@@ -306,7 +315,9 @@ impl Assets
match lookup_entry {
LookupEntry::Occupied(asset_index, _) => {
- let stored_asset = self.assets.get(*asset_index).expect("Not possible");
+ let Some(stored_asset) = self.store.get(*asset_index) else {
+ unreachable!();
+ };
if stored_asset.strong.downcast_ref::<Asset>().is_none() {
tracing::error!("Wrong asset type {}", type_name::<Asset>());
@@ -351,7 +362,9 @@ impl Assets
match lookup_entry {
LookupEntry::Occupied(asset_index, _) => {
- let stored_asset = self.assets.get(*asset_index).expect("Not possible");
+ let Some(stored_asset) = self.store.get(*asset_index) else {
+ unreachable!();
+ };
if stored_asset.strong.downcast_ref::<Asset>().is_none() {
tracing::error!(
@@ -420,9 +433,9 @@ impl Assets
tracing::debug!("Storing asset");
- self.assets.push(StoredAsset::new(asset));
+ self.store.push(StoredAsset::new(asset));
- let index = self.assets.len() - 1;
+ let index = self.store.len() - 1;
self.asset_lookup
.get_mut()
@@ -455,7 +468,7 @@ impl Assets
if let Some(LookupEntry::Pending) = asset_lookup.get(&LabelHash::new(label)) {
return true;
- };
+ }
false
}
@@ -528,7 +541,11 @@ impl Assets
{
let index = *self.importer_lookup.get(file_ext)?;
- Some(self.importers.get(index).expect("Not possible"))
+ let Some(importer) = self.importers.get(index) else {
+ unreachable!();
+ };
+
+ Some(importer)
}
}
@@ -660,11 +677,13 @@ pub struct Handle<Asset: 'static>
impl<Asset: 'static> Handle<Asset>
{
+ #[must_use]
pub fn from_id(id: Id) -> Self
{
Self { id, _pd: PhantomData }
}
+ #[must_use]
pub fn id(&self) -> Id
{
self.id
@@ -838,17 +857,17 @@ fn add_received_assets(mut assets: Single<Assets>)
curr_tick_events.clear();
- while let Some(import_work_msg) = assets.import_work_msg_receiver.try_recv().ok() {
+ while let Ok(import_work_msg) = assets.import_work_msg_receiver.try_recv() {
match import_work_msg {
ImportWorkMessage::Store { do_store, label, asset } => {
do_store(assets, label, asset);
}
ImportWorkMessage::Load { do_load, label, asset_settings } => {
do_load(
- &assets,
+ assets,
Label {
path: label.path.as_path().into(),
- name: label.name.as_deref().map(|name| name.into()),
+ name: label.name.as_deref().map(std::convert::Into::into),
},
asset_settings,
);