1use std::{path::Path, str::FromStr};
2mod dlist;
3use anyhow::Context;
4
5pub use self::dlist::Dlist;
6
7mod nlist;
8pub use self::nlist::Nlist;
9
10mod elist;
11pub use self::elist::Elist;
12
13mod prnsol;
14pub use self::prnsol::Prnsol;
15
16
17pub fn clear_nlist(contents: &str) -> impl Iterator<Item = &str> {
18 contents
19 .lines()
20 .filter_map(|line| {
21 let trimmed = line.trim();
22 trimmed.chars().next().and_then(|c| c.is_ascii_digit().then_some(trimmed))
23 })
24}
25
26
27pub fn get_list<T: FromStr<Err = anyhow::Error>>(path: &Path) -> anyhow::Result<Vec<T>> {
28 let binding = std::fs::read_to_string(path).with_context(|| format!("path `{}`", path.display()))?;
29 let vals = clear_nlist(&binding);
30 vals.map(FromStr::from_str).collect()
31}