use super::{fmt, hasher, Box, CodeBlock, Digest};
#[derive(Clone, Debug)]
pub struct Join {
body: Box<[CodeBlock; 2]>,
hash: Digest,
}
impl Join {
pub fn new(body: [CodeBlock; 2]) -> Self {
let hash = hasher::merge(&[body[0].hash(), body[1].hash()]);
Self {
body: Box::new(body),
hash,
}
}
pub fn hash(&self) -> Digest {
self.hash
}
pub fn first(&self) -> &CodeBlock {
&self.body[0]
}
pub fn second(&self) -> &CodeBlock {
&self.body[1]
}
}
impl fmt::Display for Join {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "join {} {} end", self.body[0], self.body[1])
}
}