use keyvalues_parser::{parse, Vdf};
use std::{fs, path::Path};
fn read_asset_file(file_name: &str) -> std::io::Result<String> {
let asset_path = Path::new(env!("CARGO_MANIFEST_DIR"))
.join("examples")
.join(file_name);
fs::read_to_string(asset_path)
}
fn get_version<'a>(controller_mappings: &'a Vdf<'a>) -> Option<&'a str> {
controller_mappings
.value
.get_obj()?
.get("version")?
.first()?
.get_str()
}
fn update_version(controller_mappings: &mut Vdf, new_version: String) -> Option<()> {
let version = controller_mappings
.value
.get_mut_obj()?
.get_mut("version")?
.get_mut(0)?
.get_mut_str()?
.to_mut();
*version = new_version;
Some(())
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let vdf_text = read_asset_file("parse_mutate_render.vdf")?;
let mut controller_mappings = Vdf::from(parse(&vdf_text)?);
let version = get_version(&controller_mappings).expect("controller_mappings must have version");
println!("Old Controller Mappings Version: {}", version);
update_version(&mut controller_mappings, "3".to_string())
.expect("controller_mappings must have version");
println!("Updated Controller Mappings:\n{}", controller_mappings);
assert_eq!(get_version(&controller_mappings), Some("3"));
Ok(())
}