use serde::{Deserialize, Serialize};
use crate::{
asset::AssetType,
cache::{current_package_cache_dir, current_package_identifier},
};
pub fn clear_assets() -> std::io::Result<()> {
let dir = current_package_cache_dir();
if dir.exists() {
std::fs::remove_dir_all(dir)?;
}
Ok(())
}
pub fn add_asset(asset: AssetType) -> std::io::Result<AssetType> {
let mut dir = current_package_cache_dir();
dir.push("assets.toml");
let mut package_assets: PackageAssets = if dir.exists() {
let contents = std::fs::read_to_string(&dir)?;
toml::from_str(&contents).unwrap_or_else(|_| PackageAssets {
package: current_package_identifier(),
assets: vec![],
})
} else {
std::fs::create_dir_all(dir.parent().unwrap())?;
PackageAssets {
package: current_package_identifier(),
assets: vec![],
}
};
package_assets.add(asset.clone());
let contents = toml::to_string(&package_assets).unwrap();
std::fs::write(&dir, contents)?;
Ok(asset)
}
#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Clone)]
pub struct PackageAssets {
package: String,
assets: Vec<AssetType>,
}
impl PackageAssets {
pub fn add(&mut self, asset: AssetType) {
self.assets.push(asset);
}
pub fn package(&self) -> &str {
&self.package
}
pub fn assets(&self) -> &Vec<AssetType> {
&self.assets
}
}