use crate::{
formatter::pattern_formatter::{Pattern, PatternContext},
Record, StringBuf,
};
#[derive(Clone, Debug, Default)]
pub struct StyleRange<P> {
inner: P,
}
impl<P> StyleRange<P>
where
P: Pattern,
{
#[must_use]
pub fn new(inner: P) -> Self {
Self { inner }
}
}
impl<P> Pattern for StyleRange<P>
where
P: Pattern + Clone,
{
fn format(
&self,
record: &Record,
dest: &mut StringBuf,
ctx: &mut PatternContext,
) -> crate::Result<()> {
let style_range_start = dest.len();
self.inner.format(record, dest, ctx)?;
let style_range_end = dest.len();
ctx.fmt_ctx
.set_style_range(Some(style_range_start..style_range_end));
Ok(())
}
}