podman_rest_client/
config.rs1use 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}