podman_rest_client/
config.rs

1use crate::cli;
2
3pub struct Config {
4    pub uri: String,
5    pub identity_file: Option<String>,
6}
7
8#[derive(thiserror::Error, Debug)]
9pub enum GuessError {
10    #[error("No default podman connection info found")]
11    NoDefault,
12    #[error("Cli error: {0}")]
13    Cli(#[from] cli::CliError),
14}
15
16impl Config {
17    pub async fn guess() -> Result<Config, GuessError> {
18        if cfg!(target_os = "macos") {
19            let default = cli::get_default_system_connection()
20                .await?
21                .ok_or(GuessError::NoDefault)?;
22
23            Ok(Config {
24                uri: default.uri,
25                identity_file: default.identity,
26            })
27        } else {
28            for path_socket in [
29                &format!("/run/user/{}/podman/podman.sock", nix::unistd::getuid()),
30                "/run/podman/podman.sock",
31            ] {
32                if std::path::Path::new(path_socket).exists() {
33                    return Ok(Config {
34                        uri: format!("unix://{path_socket}"),
35                        identity_file: None,
36                    });
37                }
38            }
39
40            Err(GuessError::NoDefault)
41        }
42    }
43}