From 8fd02bac369b9887b229b6ea83b01985bbae3e4a Mon Sep 17 00:00:00 2001 From: Lohann Paterno Coutinho Ferreira Date: Tue, 27 Oct 2020 19:18:25 -0300 Subject: [PATCH] Support path relative to cargo manifest dir --- binary_macros_impl/src/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/binary_macros_impl/src/lib.rs b/binary_macros_impl/src/lib.rs index df5b7a1..6d5ce17 100644 --- a/binary_macros_impl/src/lib.rs +++ b/binary_macros_impl/src/lib.rs @@ -5,6 +5,7 @@ extern crate dotenv; use std::str::FromStr; use std::io::Read; +use std::path::PathBuf; use proc_macro_hack::proc_macro_hack; use proc_macro::TokenStream; @@ -20,6 +21,17 @@ fn helper(input: TokenStream, decoder: data_encoding::Encoding) -> TokenStream file.read_to_string(&mut contents).expect("Error reading file"); decoder.decode(contents.trim().as_bytes()).expect("Parse error") + } else if input.starts_with("relative:") { + + let cargo_toml_directory = std::env::var("CARGO_MANIFEST_DIR") + .expect("Cannot find manifest file"); + let mut path: PathBuf = cargo_toml_directory.into(); + path.push(&input[9..]); + let mut file = std::fs::File::open(path).expect("Error opening file"); + let mut contents = String::new(); + file.read_to_string(&mut contents).expect("Error reading file"); + decoder.decode(contents.trim().as_bytes()).expect("Parse error") + } else if input.starts_with("env:") { dotenv::dotenv().ok();