use super::line_separated_expressions::LineSeparatedExpressions; use super::shell::Shell; use std::fmt::{Debug, Write}; pub(crate) trait Expression: Debug + Sized { fn write_shell(&self, writer: &mut impl Write) -> std::fmt::Result; fn then>(self, other: B) -> LineSeparatedExpressions { LineSeparatedExpressions { _shell: std::marker::PhantomData, a: self, b: other, } } } impl Expression for () { fn write_shell(&self, _writer: &mut impl Write) -> std::fmt::Result { Ok(()) } }