use std::borrow::Cow;
use crate::{
enums::{Modifier, Wrap},
prelude::TextAlign,
style::Style,
widgets::Span,
};
pub trait ToSpan {
fn style<T>(self, style: T) -> Span
where
T: Into<Style>;
fn modifier(self, modifier: Modifier) -> Span;
fn add_modifier(self, flag: Modifier) -> Span;
fn align(self, align: TextAlign) -> Span;
fn wrap(self, wrap: Wrap) -> Span;
fn ellipsis<T>(self, ellipsis: T) -> Span
where
T: AsRef<str>;
fn to_span(self) -> Span;
}
macro_rules! impl_to_span {
($($t:ty),* $(,)?) => {
$(
impl ToSpan for $t {
fn style<S>(self, style: S) -> Span
where
S: Into<Style>,
{
Span::new(self).style(style)
}
fn modifier(self, modifier: Modifier) -> Span {
Span::new(self).modifier(modifier)
}
fn add_modifier(self, flag: Modifier) -> Span {
Span::new(self).add_modifier(flag)
}
fn align(self, align: TextAlign) -> Span {
Span::new(self).align(align)
}
fn wrap(self, wrap: Wrap) -> Span {
Span::new(self).wrap(wrap)
}
fn ellipsis<R>(self, ellipsis: R) -> Span
where
R: AsRef<str>,
{
Span::new(self).ellipsis(ellipsis)
}
fn to_span(self) -> Span {
Span::new(self)
}
}
)*
};
}
impl_to_span!(&str, String, Cow<'_, str>);