summaryrefslogtreecommitdiffstats
path: root/src/util.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-12-01 17:00:31 -0500
committerJesse Luehrs <doy@tozt.net>2021-12-01 17:00:31 -0500
commitf9573cf0b5de23e258791fbdc424fd3abbc4fdc5 (patch)
tree9a46aa790605dbe0a7d3d9de9eebe0a0ac1dc6fb /src/util.rs
parenta40f68453cf4b59f166d70e769ce8fd6ceeeb831 (diff)
downloadadvent-of-code-f9573cf0b5de23e258791fbdc424fd3abbc4fdc5.tar.gz
advent-of-code-f9573cf0b5de23e258791fbdc424fd3abbc4fdc5.zip
simplify getting data
Diffstat (limited to 'src/util.rs')
-rw-r--r--src/util.rs41
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))?;