use crate::storage::{
StorageAction,
asset::{Asset, AssetTrait},
asset_id::AssetId,
collections::Collections,
};
pub(crate) trait AssetStore {
fn save(self, collections: &mut Collections);
}
impl<T: AssetTrait> AssetStore for Asset<T> {
fn save(self, collections: &mut Collections) {
tracing::info!("Setting asset in cache: {:?}", self.id);
collections.get_mut::<T>().set_asset(self.clone());
collections.save();
tracing::info!("Saving asset: {:?}", self.id);
let uuid = self.id.id;
match self.into_json() {
Ok(json) => {
StorageAction::SaveAsset {
dir_name: T::DIR_NAME,
uuid,
json,
}
.enqueue();
}
Err(err) => tracing::error!("Could not serialize asset {uuid}: {err}"),
}
}
}
pub(crate) fn delete_asset<T: AssetTrait>(id: AssetId<T>, collections: &mut Collections) {
tracing::info!("Deleting asset: {id}");
collections.get_mut::<T>().delete_asset(id);
collections.save();
StorageAction::DeleteAsset {
uuid: id.id,
dir_name: T::DIR_NAME,
}
.enqueue();
}