diff options
Diffstat (limited to 'src/util.rs')
-rw-r--r-- | src/util.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/util.rs b/src/util.rs index 6a62708..9cc3d6a 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,6 +1,47 @@ use anyhow::Context as _; use std::io::{BufRead as _, Read as _}; +macro_rules! data { + () => {{ + let file = crate::util::src_file_to_data_file(&std::file!()); + std::fs::File::open(file.clone()) + .with_context(|| format!("couldn't find data file {}", file)) + }}; +} + +macro_rules! data_ints { + () => { + crate::util::read_ints(&crate::util::src_file_to_data_file( + &std::file!(), + )) + }; +} + +macro_rules! data_bytes { + () => { + crate::util::read_file(&crate::util::src_file_to_data_file( + &std::file!(), + )) + }; +} + +macro_rules! data_str { + () => { + crate::util::read_file_str(&crate::util::src_file_to_data_file( + &std::file!(), + )) + }; +} + +pub fn src_file_to_data_file(file: &str) -> String { + let parts: Vec<_> = file.split('/').collect(); + format!( + "data/{}/{}.txt", + parts[parts.len() - 3], + parts[parts.len() - 2] + ) +} + pub fn read_ints(filename: &str) -> anyhow::Result<Vec<i64>> { let f = std::fs::File::open(filename) .with_context(|| format!("couldn't find data file {}", filename))?; |