|
1 | 1 | use slog::{warn, Logger}; |
2 | 2 | use std::env; |
| 3 | +use std::str::FromStr; |
3 | 4 |
|
4 | 5 | /// Read environment variable with fallback to deprecated key |
5 | 6 | /// |
@@ -52,39 +53,16 @@ pub fn read_env_with_default( |
52 | 53 | read_env_with_fallback(logger, new_key, old_key).unwrap_or_else(|| default.to_string()) |
53 | 54 | } |
54 | 55 |
|
55 | | -/// Parse u64 from environment variable with fallback |
| 56 | +/// Parse a value from environment variable with fallback |
56 | 57 | /// |
57 | | -/// Reads an environment variable with fallback support and parses it as a u64. |
| 58 | +/// Reads an environment variable with fallback support and parses it using `FromStr`. |
58 | 59 | /// Returns the default value if the variable is not set or cannot be parsed. |
59 | | -/// |
60 | | -/// # Arguments |
61 | | -/// * `logger` - Logger for emitting deprecation warnings |
62 | | -/// * `new_key` - The new environment variable name |
63 | | -/// * `old_key` - The deprecated environment variable name |
64 | | -/// * `default` - Default value to return if parsing fails or neither key is set |
65 | | -/// |
66 | | -/// # Returns |
67 | | -/// The parsed u64 value, or the default if parsing fails or neither key is set |
68 | | -pub fn read_u64_with_fallback(logger: &Logger, new_key: &str, old_key: &str, default: u64) -> u64 { |
69 | | - read_env_with_fallback(logger, new_key, old_key) |
70 | | - .and_then(|s| s.parse().ok()) |
71 | | - .unwrap_or(default) |
72 | | -} |
73 | | - |
74 | | -/// Parse u32 from environment variable with fallback |
75 | | -/// |
76 | | -/// Reads an environment variable with fallback support and parses it as a u32. |
77 | | -/// Returns the default value if the variable is not set or cannot be parsed. |
78 | | -/// |
79 | | -/// # Arguments |
80 | | -/// * `logger` - Logger for emitting deprecation warnings |
81 | | -/// * `new_key` - The new environment variable name |
82 | | -/// * `old_key` - The deprecated environment variable name |
83 | | -/// * `default` - Default value to return if parsing fails or neither key is set |
84 | | -/// |
85 | | -/// # Returns |
86 | | -/// The parsed u32 value, or the default if parsing fails or neither key is set |
87 | | -pub fn read_u32_with_fallback(logger: &Logger, new_key: &str, old_key: &str, default: u32) -> u32 { |
| 60 | +pub fn read_parsed_with_fallback<T: FromStr>( |
| 61 | + logger: &Logger, |
| 62 | + new_key: &str, |
| 63 | + old_key: &str, |
| 64 | + default: T, |
| 65 | +) -> T { |
88 | 66 | read_env_with_fallback(logger, new_key, old_key) |
89 | 67 | .and_then(|s| s.parse().ok()) |
90 | 68 | .unwrap_or(default) |
@@ -148,69 +126,49 @@ mod tests { |
148 | 126 | } |
149 | 127 |
|
150 | 128 | #[test] |
151 | | - fn test_read_u64_with_fallback() { |
| 129 | + fn test_read_parsed_with_fallback() { |
152 | 130 | let logger = crate::log::logger(true); |
153 | | - std::env::set_var("NEW_KEY_U64", "12345"); |
154 | 131 |
|
155 | | - let result = read_u64_with_fallback(&logger, "NEW_KEY_U64", "OLD_KEY_U64", 999); |
| 132 | + // Test u64 parsing |
| 133 | + std::env::set_var("NEW_KEY_PARSED", "12345"); |
| 134 | + let result: u64 = |
| 135 | + read_parsed_with_fallback(&logger, "NEW_KEY_PARSED", "OLD_KEY_PARSED", 999); |
156 | 136 | assert_eq!(result, 12345); |
| 137 | + std::env::remove_var("NEW_KEY_PARSED"); |
157 | 138 |
|
158 | | - std::env::remove_var("NEW_KEY_U64"); |
159 | | - |
160 | | - // Test with old key |
161 | | - std::env::set_var("OLD_KEY_U64", "67890"); |
162 | | - let result = read_u64_with_fallback(&logger, "NEW_KEY_U64", "OLD_KEY_U64", 999); |
163 | | - assert_eq!(result, 67890); |
164 | | - |
165 | | - std::env::remove_var("OLD_KEY_U64"); |
166 | | - |
167 | | - // Test with default |
168 | | - let result = read_u64_with_fallback(&logger, "NEW_KEY_U64", "OLD_KEY_U64", 999); |
169 | | - assert_eq!(result, 999); |
170 | | - } |
171 | | - |
172 | | - #[test] |
173 | | - fn test_read_u32_with_fallback() { |
174 | | - let logger = crate::log::logger(true); |
175 | | - std::env::set_var("NEW_KEY_U32", "123"); |
176 | | - |
177 | | - let result = read_u32_with_fallback(&logger, "NEW_KEY_U32", "OLD_KEY_U32", 999); |
| 139 | + // Test u32 parsing |
| 140 | + std::env::set_var("NEW_KEY_PARSED", "123"); |
| 141 | + let result: u32 = |
| 142 | + read_parsed_with_fallback(&logger, "NEW_KEY_PARSED", "OLD_KEY_PARSED", 999); |
178 | 143 | assert_eq!(result, 123); |
| 144 | + std::env::remove_var("NEW_KEY_PARSED"); |
179 | 145 |
|
180 | | - std::env::remove_var("NEW_KEY_U32"); |
181 | | - |
182 | | - // Test with old key |
183 | | - std::env::set_var("OLD_KEY_U32", "456"); |
184 | | - let result = read_u32_with_fallback(&logger, "NEW_KEY_U32", "OLD_KEY_U32", 999); |
185 | | - assert_eq!(result, 456); |
186 | | - |
187 | | - std::env::remove_var("OLD_KEY_U32"); |
188 | | - |
189 | | - // Test with default |
190 | | - let result = read_u32_with_fallback(&logger, "NEW_KEY_U32", "OLD_KEY_U32", 999); |
191 | | - assert_eq!(result, 999); |
192 | | - } |
193 | | - |
194 | | - #[test] |
195 | | - fn test_invalid_u64_uses_default() { |
196 | | - let logger = crate::log::logger(true); |
197 | | - std::env::set_var("NEW_KEY_INVALID", "not_a_number"); |
| 146 | + // Test with old key fallback |
| 147 | + std::env::set_var("OLD_KEY_PARSED", "67890"); |
| 148 | + let result: u64 = |
| 149 | + read_parsed_with_fallback(&logger, "NEW_KEY_PARSED", "OLD_KEY_PARSED", 999); |
| 150 | + assert_eq!(result, 67890); |
| 151 | + std::env::remove_var("OLD_KEY_PARSED"); |
198 | 152 |
|
199 | | - let result = read_u64_with_fallback(&logger, "NEW_KEY_INVALID", "OLD_KEY_INVALID", 999); |
| 153 | + // Test with default when neither key is set |
| 154 | + let result: u64 = |
| 155 | + read_parsed_with_fallback(&logger, "NEW_KEY_PARSED", "OLD_KEY_PARSED", 999); |
200 | 156 | assert_eq!(result, 999); |
201 | | - |
202 | | - std::env::remove_var("NEW_KEY_INVALID"); |
203 | 157 | } |
204 | 158 |
|
205 | 159 | #[test] |
206 | | - fn test_invalid_u32_uses_default() { |
| 160 | + fn test_read_parsed_invalid_uses_default() { |
207 | 161 | let logger = crate::log::logger(true); |
208 | | - std::env::set_var("NEW_KEY_INVALID_U32", "not_a_number"); |
| 162 | + std::env::set_var("NEW_KEY_INVALID_PARSED", "not_a_number"); |
209 | 163 |
|
210 | | - let result = |
211 | | - read_u32_with_fallback(&logger, "NEW_KEY_INVALID_U32", "OLD_KEY_INVALID_U32", 999); |
| 164 | + let result: u64 = read_parsed_with_fallback( |
| 165 | + &logger, |
| 166 | + "NEW_KEY_INVALID_PARSED", |
| 167 | + "OLD_KEY_INVALID_PARSED", |
| 168 | + 999, |
| 169 | + ); |
212 | 170 | assert_eq!(result, 999); |
213 | 171 |
|
214 | | - std::env::remove_var("NEW_KEY_INVALID_U32"); |
| 172 | + std::env::remove_var("NEW_KEY_INVALID_PARSED"); |
215 | 173 | } |
216 | 174 | } |
0 commit comments