Merge pull request 'Make patch materials more flexible' (#1) from kriztw/vmt-parser:main into main

Reviewed-on: https://codeberg.org/icewind/vmt-parser/pulls/1
Reviewed-by: Robin Appelman <icewind@noreply.codeberg.org>
This commit is contained in:
Robin Appelman 2026-07-11 20:37:53 +02:00
commit 5bed13a965
2 changed files with 12 additions and 4 deletions

View file

@ -196,9 +196,9 @@ impl Material {
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PatchMaterial { pub struct PatchMaterial {
#[serde(deserialize_with = "deserialize_path")] #[serde(deserialize_with = "deserialize_path")]
include: String, pub include: String,
#[serde(default)] #[serde(default)]
replace: Table, pub replace: Table,
} }
impl PatchMaterial { impl PatchMaterial {
@ -209,7 +209,14 @@ impl PatchMaterial {
E: From<VdfError>, E: From<VdfError>,
{ {
let base = loader(&self.include)?.to_ascii_lowercase(); let base = loader(&self.include)?.to_ascii_lowercase();
let mut material = Table::load_from_str(&base)?; Ok(self.apply(&base)?)
}
/// Parse the base material and apply the patch
///
/// The base material needs to be lowercase.
pub fn apply(&self, base: &str) -> Result<Material, VdfError> {
let mut material = Table::load_from_str(base)?;
let material_values = match material.iter_mut().next() { let material_values = match material.iter_mut().next() {
Some((_, Entry::Table(table))) => table, Some((_, Entry::Table(table))) => table,
@ -224,7 +231,7 @@ impl PatchMaterial {
material_values.insert(key.clone(), value.clone()); material_values.insert(key.clone(), value.clone());
} }
Ok(from_entry(Entry::Table(material))?) from_entry(Entry::Table(material))
} }
} }

View file

@ -16,6 +16,7 @@ pub struct ModulateMaterial {
#[derive(Debug, Clone, Serialize, Deserialize, Default)] #[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
#[allow(unused)]
pub enum SpriteOrientation { pub enum SpriteOrientation {
ParallelUpright, ParallelUpright,
#[default] #[default]