orion_accessor/addr/
local.rs1use crate::prelude::*;
2
3#[derive(Getters, Clone, Debug, Serialize, Deserialize, PartialEq)]
4#[getset(get = "pub")]
5#[serde(rename = "local")]
6pub struct LocalPath {
7 path: String,
8}
9
10impl EnvEvalable<LocalPath> for LocalPath {
11 fn env_eval(self, dict: &EnvDict) -> LocalPath {
12 Self {
13 path: self.path.env_eval(dict),
14 }
15 }
16}
17impl From<&str> for LocalPath {
18 fn from(value: &str) -> Self {
19 Self {
20 path: value.to_string(),
21 }
22 }
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28 use std::collections::HashMap;
29
30 #[test]
31 fn test_local_path_from_str() {
32 let local_path = LocalPath::from("/path/to/file");
33 assert_eq!(local_path.path, "/path/to/file");
34 }
35
36 #[test]
37 fn test_local_path_env_eval_no_vars() {
38 let local_path = LocalPath::from("/static/path");
39 let dict = EnvDict::new();
40 let result = local_path.env_eval(&dict);
41 assert_eq!(result.path, "/static/path");
42 }
43
44 #[test]
45 fn test_local_path_env_eval_with_vars() {
46 let local_path = LocalPath::from("${HOME}/project");
47 let mut dict = HashMap::new();
48 dict.insert("HOME".to_string(), "/Users/test".to_string());
49 let env_dict = EnvDict::from(dict);
50 let result = local_path.env_eval(&env_dict);
51 assert_eq!(result.path, "/Users/test/project");
52 }
53
54 #[test]
55 fn test_local_path_env_eval_multiple_vars() {
56 let local_path = LocalPath::from("${HOME}/${PROJECT_NAME}/src");
57 let mut dict = HashMap::new();
58 dict.insert("HOME".to_string(), "/Users/test".to_string());
59 dict.insert("PROJECT_NAME".to_string(), "my-project".to_string());
60 let env_dict = EnvDict::from(dict);
61 let result = local_path.env_eval(&env_dict);
62 assert_eq!(result.path, "/Users/test/my-project/src");
63 }
64
65 #[test]
66 fn test_local_path_env_eval_undefined_var() {
67 let local_path = LocalPath::from("${UNDEFINED_VAR}/path");
68 let dict = EnvDict::new();
69 let result = local_path.env_eval(&dict);
70 assert_eq!(result.path, "${UNDEFINED_VAR}/path");
72 }
73
74 #[test]
75 fn test_local_path_clone() {
76 let local_path = LocalPath::from("/original/path");
77 let cloned = local_path.clone();
78 assert_eq!(local_path.path, cloned.path);
79 }
80
81 #[test]
82 fn test_local_path_partial_eq() {
83 let path1 = LocalPath::from("/same/path");
84 let path2 = LocalPath::from("/same/path");
85 let path3 = LocalPath::from("/different/path");
86
87 assert_eq!(path1, path2);
88 assert_ne!(path1, path3);
89 }
90
91 #[test]
92 fn test_local_path_debug() {
93 let local_path = LocalPath::from("/debug/path");
94 let debug_str = format!("{local_path:?}");
95 assert!(debug_str.contains("LocalPath"));
96 assert!(debug_str.contains("/debug/path"));
97 }
98}