use super::instance;
use crate::definition::TransparentWorkdir;
pub struct Command<'a> {
pub command: &'a instance::Command,
pub workdir: &'a TransparentWorkdir,
}
impl Command<'_> {
pub async fn run(
&self,
definition: &crate::definition::Definition,
) -> Result<(), super::Error> {
definition
.with_container(async |container| {
run_on_container(self.command, container, self.workdir).await
})
.await??;
Ok(())
}
}
pub(super) async fn run_on_container(
command: &instance::Command,
container: &crate::container::Container,
workdir: &TransparentWorkdir,
) -> Result<(), super::Error> {
match command {
instance::Command::Psql => {
container.exec_transparent_psql(workdir).await?;
}
instance::Command::RunEnv { command, arguments } => {
container
.exec_transparent_run_env(workdir, command, arguments)
.await?;
}
instance::Command::SchemaDump => {
let output = container
.exec_transparent_schema_dump(workdir, &pg_client::PgSchemaDump::new())
.await?;
println!("{output}");
}
instance::Command::Shell => {
container.exec_transparent_shell(workdir).await?;
}
instance::Command::Pgbench { arguments } => {
container
.exec_transparent_pgbench(workdir, arguments)
.await?;
}
}
Ok(())
}