mirror of
https://codeberg.org/icewind/vdf-reader.git
synced 2026-06-03 10:04:08 +02:00
better errors for keys without values
This commit is contained in:
parent
2f6fc3e180
commit
9c06896b34
8 changed files with 191 additions and 6 deletions
|
|
@ -0,0 +1,46 @@
|
|||
use miette::{Context, IntoDiagnostic, Result};
|
||||
use std::env::args;
|
||||
use std::fs::read_to_string;
|
||||
use std::path::Path;
|
||||
use vdf_reader::entry::Table;
|
||||
use vdf_reader::Reader;
|
||||
use walkdir::WalkDir;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let mut success = 0;
|
||||
let mut err = Vec::new();
|
||||
let dir = args().nth(1).expect("no path provided");
|
||||
for entry in WalkDir::new(dir)
|
||||
.into_iter()
|
||||
.filter_map(|e| e.ok())
|
||||
.filter(|e| {
|
||||
let name = e.file_name().to_str().unwrap_or_default();
|
||||
name.ends_with(".vmt") || name.ends_with(".vdf")
|
||||
})
|
||||
{
|
||||
if let Err(e) = try_parse(entry.path()) {
|
||||
err.push(e);
|
||||
let e = try_parse(entry.path()).unwrap_err();
|
||||
println!("{:?}", e);
|
||||
} else {
|
||||
success += 1;
|
||||
println!("{}", entry.path().display());
|
||||
}
|
||||
}
|
||||
|
||||
println!("successfully parsed {success} files");
|
||||
println!("found errors in {} files", err.len());
|
||||
for e in err {
|
||||
println!("{:?}", e);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn try_parse(path: &Path) -> Result<Table> {
|
||||
let raw = read_to_string(path)
|
||||
.into_diagnostic()
|
||||
.wrap_err_with(|| format!("failed to read {}", path.display()))?;
|
||||
let mut reader = Reader::from(raw.as_str());
|
||||
Table::load(&mut reader).wrap_err_with(|| format!("failed to parse {}", path.display()))
|
||||
}
|
||||
16
examples/tokens.rs
Normal file
16
examples/tokens.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
use miette::{Context, IntoDiagnostic, Result};
|
||||
use std::env::args;
|
||||
use std::fs::read_to_string;
|
||||
use vdf_reader::Reader;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let path = args().nth(1).expect("no path provided");
|
||||
let raw = read_to_string(path)
|
||||
.into_diagnostic()
|
||||
.wrap_err("failed to read input")?;
|
||||
let reader = Reader::from(raw.as_str());
|
||||
for event in reader {
|
||||
println!("{:?}", event?);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue