use crate::Render;
use derive_more::Display;
use pipe_trait::Pipe;
#[derive(Debug, Clone, Copy)]
pub enum Segment<Query> {
Character(char),
Expression(Query),
}
#[derive(Debug, Display, Clone, Copy)]
pub enum SegmentDisplay<Output> {
Character(char),
ExpressionResult(Output),
}
impl<Respond, Output, Error, Query> Render<Respond, SegmentDisplay<Output>, Error>
for Segment<Query>
where
Respond: FnMut(Query) -> Result<Output, Error>,
{
fn render(self, respond: &mut Respond) -> Result<SegmentDisplay<Output>, Error> {
Ok(match self {
Segment::Character(value) => SegmentDisplay::Character(value),
Segment::Expression(query) => respond(query)?.pipe(SegmentDisplay::ExpressionResult),
})
}
}