diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-12-01 17:00:31 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-12-01 17:00:31 -0500 |
commit | f9573cf0b5de23e258791fbdc424fd3abbc4fdc5 (patch) | |
tree | 9a46aa790605dbe0a7d3d9de9eebe0a0ac1dc6fb /src/util.rs | |
parent | a40f68453cf4b59f166d70e769ce8fd6ceeeb831 (diff) | |
download | advent-of-code-f9573cf0b5de23e258791fbdc424fd3abbc4fdc5.tar.gz advent-of-code-f9573cf0b5de23e258791fbdc424fd3abbc4fdc5.zip |
simplify getting data
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))?; |