zellij_utils/
envs.rs

1/// Uniformly operates ZELLIJ* environment variables
2use anyhow::Result;
3use serde::{Deserialize, Serialize};
4use std::{
5    collections::{BTreeMap, HashMap},
6    env::{set_var, var},
7};
8
9use std::fmt;
10
11pub const ZELLIJ_ENV_KEY: &str = "ZELLIJ";
12pub fn get_zellij() -> Result<String> {
13    Ok(var(ZELLIJ_ENV_KEY)?)
14}
15pub fn set_zellij(v: String) {
16    set_var(ZELLIJ_ENV_KEY, v);
17}
18
19pub const SESSION_NAME_ENV_KEY: &str = "ZELLIJ_SESSION_NAME";
20
21pub fn get_session_name() -> Result<String> {
22    Ok(var(SESSION_NAME_ENV_KEY)?)
23}
24
25pub fn set_session_name(v: String) {
26    set_var(SESSION_NAME_ENV_KEY, v);
27}
28
29pub const SOCKET_DIR_ENV_KEY: &str = "ZELLIJ_SOCKET_DIR";
30pub fn get_socket_dir() -> Result<String> {
31    Ok(var(SOCKET_DIR_ENV_KEY)?)
32}
33
34/// Manage ENVIRONMENT VARIABLES from the configuration and the layout files
35#[derive(Default, Clone, PartialEq, Serialize, Deserialize)]
36pub struct EnvironmentVariables {
37    env: HashMap<String, String>,
38}
39
40impl fmt::Debug for EnvironmentVariables {
41    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
42        let mut stable_sorted = BTreeMap::new();
43        for (env_var_name, env_var_value) in self.env.iter() {
44            stable_sorted.insert(env_var_name, env_var_value);
45        }
46        write!(f, "{:#?}", stable_sorted)
47    }
48}
49
50impl EnvironmentVariables {
51    /// Merges two structs, keys from `other` supersede keys from `self`
52    pub fn merge(&self, other: Self) -> Self {
53        let mut env = self.clone();
54        env.env.extend(other.env);
55        env
56    }
57    pub fn from_data(data: HashMap<String, String>) -> Self {
58        EnvironmentVariables { env: data }
59    }
60    /// Set all the ENVIRONMENT VARIABLES, that are configured
61    /// in the configuration and layout files
62    pub fn set_vars(&self) {
63        for (k, v) in &self.env {
64            set_var(k, v);
65        }
66    }
67    pub fn inner(&self) -> &HashMap<String, String> {
68        &self.env
69    }
70}