use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use crate::{
action::{ActionError, Context},
action_impl::ActionImpl,
runlog::RunLogSource,
};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Pwd;
impl ActionImpl for Pwd {
fn execute(&self, context: &mut Context) -> Result<(), ActionError> {
let path = context.source_dir();
let path = path
.canonicalize()
.map_err(|err| PwdError::Canonicalize(path.to_path_buf(), err))?;
context
.runlog()
.debug(RunLogSource::PostPlan, format!("cwd: {}", path.display()));
Ok(())
}
}
#[derive(Debug, thiserror::Error)]
pub enum PwdError {
#[error("failed to make path absolute: {0}")]
Canonicalize(PathBuf, #[source] std::io::Error),
}
impl From<PwdError> for ActionError {
fn from(value: PwdError) -> Self {
Self::Pwd(value)
}
}