use crate::core::environment::RunSignal;
use crate::core::exec::ExecOutcome;
use crate::core::Element;
use crate::error::Result;
pub struct CompressedBlock {
pub body: Vec<Element>,
}
impl CompressedBlock {
pub fn new(body: Vec<Element>) -> Self {
CompressedBlock { body }
}
pub(crate) fn exec(&self, env: &mut crate::core::Environment) -> Result<ExecOutcome> {
let captured = env.capture(|env| env.run(&self.body))?;
match captured.0 {
RunSignal::Returned(v) => Ok(ExecOutcome::ReturnValue(v)),
RunSignal::Completed => {
env.emit(&crate::template::utility::standard_compress_text(
&captured.1,
false,
))?;
Ok(ExecOutcome::Done)
}
}
}
}