use std::{
collections::{
HashMap,
HashSet,
},
path::{
Path,
PathBuf,
},
fs,
};
#[allow(clippy::wildcard_imports)]
use crate::{
mods::Dependency,
serialization::{
ParseXMLError,
about::parse_about,
},
};
#[allow(non_snake_case)]
#[non_exhaustive]
#[derive(Debug, Clone, Default)]
pub struct ModMetaData {
pub path: Option<PathBuf>,
pub name: Option<String>,
pub author: Option<String>,
pub authors: Option<Vec<String>>,
pub url: Option<String>, pub packageId: Option<String>,
pub supportedVersions: Option<HashSet<String>>,
pub description: Option<String>,
pub descriptionsByVersion: Option<HashMap<String, String>>,
pub modDependencies: Option<HashSet<Dependency>>,
pub modDependenciesByVersion: Option<HashMap<String, HashSet<Dependency>>>,
pub loadAfter: Option<HashSet<String>>,
pub loadAfterByVersion: Option<HashMap<String, HashSet<String>>>,
pub forceLoadAfter: Option<HashSet<String>>,
pub loadBefore: Option<HashSet<String>>,
pub loadBeforeByVersion: Option<HashMap<String, HashSet<String>>>,
pub forceLoadBefore: Option<HashSet<String>>,
pub incompatibleWith: Option<HashSet<String>>,
pub incompatibleWithByVersion: Option<HashMap<String, HashSet<String>>>,
}
impl ModMetaData {
pub fn read<P: AsRef<Path>>(path: P) -> Result<Self, ParseXMLError> {
log::debug!("Parsing {:?}", path.as_ref());
let file = fs::read(path)?;
parse_about(&file)
.map_err(Into::into)
}
}