use crate::utils::podman::{Podman, PodmanContainerState, PodmanError};
use {clap::Args, thiserror::Error};
#[derive(Debug, Error)]
pub enum EnterError {
#[error(transparent)]
Podman(#[from] PodmanError),
#[error(
"container '{name}' is in state '{state}', not 'running'; run `podcell start {name}` first"
)]
NotRunning {
name: String,
state: PodmanContainerState,
},
}
#[derive(Args)]
pub struct Arguments {
#[arg()]
name: String,
}
pub fn run(args: Arguments) -> Result<(), EnterError> {
let podman = Podman::new();
let container = podman.find_by_name(&args.name)?;
if container.state != PodmanContainerState::Running {
return Err(EnterError::NotRunning {
name: args.name,
state: container.state,
});
}
podman.exec_interactive(&container.id, &["/usr/bin/podcell", "shell"])?;
Ok(())
}