mirror of
https://github.com/encounter/objdiff.git
synced 2025-10-06 01:49:47 +00:00
34 lines
1.3 KiB
Rust
34 lines
1.3 KiB
Rust
pub mod diff;
|
|
pub mod report;
|
|
|
|
use std::str::FromStr;
|
|
|
|
use anyhow::{Context, Result, anyhow};
|
|
use objdiff_core::diff::{ConfigEnum, ConfigPropertyId, ConfigPropertyKind, DiffObjConfig};
|
|
|
|
pub fn apply_config_args(diff_config: &mut DiffObjConfig, args: &[String]) -> Result<()> {
|
|
for config in args {
|
|
let (key, value) = config.split_once('=').context("--config expects \"key=value\"")?;
|
|
let property_id = ConfigPropertyId::from_str(key)
|
|
.map_err(|()| anyhow!("Invalid configuration property: {}", key))?;
|
|
diff_config.set_property_value_str(property_id, value).map_err(|()| {
|
|
let mut options = String::new();
|
|
match property_id.kind() {
|
|
ConfigPropertyKind::Boolean => {
|
|
options = "true, false".to_string();
|
|
}
|
|
ConfigPropertyKind::Choice(variants) => {
|
|
for (i, variant) in variants.iter().enumerate() {
|
|
if i > 0 {
|
|
options.push_str(", ");
|
|
}
|
|
options.push_str(variant.value);
|
|
}
|
|
}
|
|
}
|
|
anyhow!("Invalid value for {}. Expected one of: {}", property_id.name(), options)
|
|
})?;
|
|
}
|
|
Ok(())
|
|
}
|