use std::sync::Arc;
use gled_model::{asset::Asset, collection::Collections};
use gled_protocol::{assets::KnownAsset, state::ClientInput};
pub(crate) trait AssetEdits {
fn save(self, collections: &mut Collections);
fn delete(&self, collections: &mut Collections);
}
impl<T: KnownAsset> AssetEdits for Asset<T> {
fn save(self, collections: &mut Collections) {
let asset = Arc::new(self);
collections.get_mut::<T>().insert_shared(asset.clone());
ClientInput::SaveAsset(T::wrap(asset)).enqueue();
}
fn delete(&self, collections: &mut Collections) {
collections.get_mut::<T>().delete_asset(self.id);
ClientInput::DeleteAsset(T::wrap_id(self.id)).enqueue();
}
}