use std::path::PathBuf;
use serde::Deserialize;
use super::{Pipe, Result};
use crate::ops::run::codegen::source::Source;
#[derive(Debug, Deserialize)]
pub struct Action {
source: Source,
directory: Option<PathBuf>,
}
impl Action {
pub async fn execute(&self, pipe: &mut Pipe) -> Result<()> {
if let Some(directory) = &self.directory {
super::validate_contained_path(directory, "import directory")?;
}
let source = self.source.run().await?;
match &self.directory {
Some(path) => {
let output = pipe.output_temp()?;
let source = source.join(path);
crate::util::fs::copy_dir(source, output).await?;
}
None => {
pipe.output(source);
}
}
Ok(())
}
}