1use std::path::PathBuf;
2
3#[derive(Debug, Clone)]
4pub enum Endpoint {
5 UnixSocket(PathBuf),
6}
7
8impl Endpoint {
9 pub fn unix(path: impl Into<PathBuf>) -> Self {
10 Endpoint::UnixSocket(path.into())
11 }
12
13 pub fn default_anos() -> Self {
15 let home = std::env::var("HOME").unwrap_or_else(|_| ".".into());
16 Endpoint::UnixSocket(PathBuf::from(home).join(".anos").join("anos.sock"))
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn unix_constructor_accepts_str_and_pathbuf() {
26 let e1 = Endpoint::unix("/tmp/a.sock");
27 let e2 = Endpoint::unix(PathBuf::from("/tmp/a.sock"));
28 match (e1, e2) {
29 (Endpoint::UnixSocket(a), Endpoint::UnixSocket(b)) => assert_eq!(a, b),
30 }
31 }
32
33 #[test]
34 fn default_anos_uses_dot_anos_anos_sock() {
35 let e = Endpoint::default_anos();
36 match e {
37 Endpoint::UnixSocket(p) => {
38 let s = p.to_string_lossy().to_string();
39 assert!(s.ends_with(".anos/anos.sock"), "got: {s}");
40 }
41 }
42 }
43}