1use 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#[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 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 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}