From 8f0d123db51b18e9cc4ab5bd39a474ba99bd39c3 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 10 Oct 2025 19:14:15 +0000 Subject: [PATCH] tsk-22: Add function to parse env variable to a vector of strings (#25) Closes #22 Reviewed-on: https://git.kundeng.us/phoenix/icarus_envy/pulls/25 Co-authored-by: phoenix Co-committed-by: phoenix --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/environment.rs | 6 ++++-- src/lib.rs | 24 ++++++++++++++++++++++++ src/utility.rs | 15 +++++++++++++++ tests/test.rs | 23 ++++++++++++++++++++++- 6 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 src/utility.rs diff --git a/Cargo.lock b/Cargo.lock index a0ae075..fec5334 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -297,7 +297,7 @@ checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "icarus_envy" -version = "0.4.0" +version = "0.4.1" dependencies = [ "async-std", "const_format", diff --git a/Cargo.toml b/Cargo.toml index 72a3b8c..9b1a7d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus_envy" -version = "0.4.0" +version = "0.4.1" edition = "2024" rust-version = "1.88" diff --git a/src/environment.rs b/src/environment.rs index b0e9972..5848c7d 100644 --- a/src/environment.rs +++ b/src/environment.rs @@ -90,13 +90,15 @@ pub async fn get_allowed_origins() -> crate::EnvVar { let key = crate::keys::ALLOWED_ORIGINS; let value = std::env::var(key).expect(key); - crate::init_envvar(key, &value) + let mut envvar = crate::init_envvar(key, &value); + crate::init_delimiter(&mut envvar, ','); + + envvar } /// Get environment not specified in the code pub async fn get_env(environment: &str) -> crate::EnvVar { dotenvy::dotenv().ok(); - // let key = crate::keys:: let my_error = format!("{environment} {}", crate::keys::error::GENERAL_ERROR); let value = std::env::var(environment).expect(&my_error); diff --git a/src/lib.rs b/src/lib.rs index 5e88d16..d3d1bde 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,15 +1,39 @@ pub mod environment; pub mod keys; +pub mod utility; #[derive(Debug, Default, Clone)] pub struct EnvVar { pub key: String, pub value: String, + pub has_delimiter: bool, + pub delimiter: char, } pub fn init_envvar(key: &str, value: &str) -> EnvVar { EnvVar { key: key.to_string(), value: value.to_string(), + has_delimiter: false, + ..Default::default() + } +} + +pub fn init_delimiter(envvar: &mut EnvVar, delimiter: char) { + let mut amount_of_delimiters_found: i32 = 0; + + for v in envvar.value.chars() { + if v == delimiter { + amount_of_delimiters_found += 1; + } + } + + let has_delimiter = amount_of_delimiters_found >= 1; + + if has_delimiter { + envvar.has_delimiter = has_delimiter; + envvar.delimiter = delimiter; + } else { + envvar.has_delimiter = has_delimiter; } } diff --git a/src/utility.rs b/src/utility.rs new file mode 100644 index 0000000..11b5476 --- /dev/null +++ b/src/utility.rs @@ -0,0 +1,15 @@ +/// Take the Environment variable and delimitize it. If the value has a delimiter, +/// extract it into some strings +pub fn delimitize(var: &crate::EnvVar) -> Result, std::io::Error> { + if var.has_delimiter { + Ok(var + .value + .split(var.delimiter) + .map(|c| c.parse::().unwrap()) + .collect()) + } else { + Err(std::io::Error::other( + "Environment variable does not have a delimiter", + )) + } +} diff --git a/tests/test.rs b/tests/test.rs index d92de61..59bc259 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -114,7 +114,28 @@ mod tests { "{} does not match {:?}", icarus_envy::keys::ALLOWED_ORIGINS, result - ) + ); + + assert_eq!( + result.has_delimiter, true, + "The {} variable has an issue finding the delimiter", + result.key + ); + + match icarus_envy::utility::delimitize(&result) { + Ok(allowed_origins) => { + assert_eq!( + allowed_origins.len(), + 2, + "The amount of allowed origins does not match. {} {}", + allowed_origins.len(), + 2 + ) + } + Err(err) => { + assert!(false, "Error: {:?}", err) + } + } } #[test]