Skip to main content

windjammer_runtime/
env.rs

1//! Environment variable operations
2//!
3//! Windjammer's `std::env` module maps to these functions.
4
5/// Get an environment variable
6pub fn var(key: &str) -> Result<String, String> {
7    std::env::var(key).map_err(|e| e.to_string())
8}
9
10/// Get an environment variable or return a default
11pub fn get_or(key: &str, default: &str) -> String {
12    std::env::var(key).unwrap_or_else(|_| default.to_string())
13}
14
15/// Get an environment variable (optional)
16pub fn get(key: &str) -> Option<String> {
17    std::env::var(key).ok()
18}
19
20/// Set an environment variable
21pub fn set_var(key: &str, value: &str) {
22    std::env::set_var(key, value);
23}
24
25/// Remove an environment variable
26pub fn remove_var(key: &str) {
27    std::env::remove_var(key);
28}
29
30/// Get all environment variables
31pub fn vars() -> Vec<(String, String)> {
32    std::env::vars().collect()
33}
34
35/// Get current working directory
36pub fn current_dir() -> Result<String, String> {
37    std::env::current_dir()
38        .map(|p| p.to_string_lossy().to_string())
39        .map_err(|e| e.to_string())
40}
41
42/// Get current executable path
43pub fn current_exe() -> Result<String, String> {
44    std::env::current_exe()
45        .map(|p| p.to_string_lossy().to_string())
46        .map_err(|e| e.to_string())
47}
48
49/// Get command line arguments
50pub fn args() -> Vec<String> {
51    std::env::args().collect()
52}
53
54#[cfg(test)]
55mod tests {
56    use super::*;
57
58    #[test]
59    fn test_set_get_var() {
60        set_var("WINDJAMMER_TEST", "hello");
61        assert_eq!(var("WINDJAMMER_TEST"), Ok("hello".to_string()));
62        remove_var("WINDJAMMER_TEST");
63        assert!(var("WINDJAMMER_TEST").is_err());
64    }
65
66    #[test]
67    fn test_current_dir() {
68        let dir = current_dir();
69        assert!(dir.is_ok());
70    }
71
72    #[test]
73    fn test_args() {
74        let args = args();
75        assert!(!args.is_empty());
76    }
77}