use core::fmt::{Debug, Display};
pub trait FormatValue: Display + Debug {}
impl<T: Display + Debug + ?Sized> FormatValue for T {}
pub enum FormatArg<'a> {
Ref(&'a dyn FormatValue),
Str(&'a str),
}
impl<'a> FormatArg<'a> {
pub(crate) fn value(&self) -> &dyn FormatValue {
match self {
Self::Ref(v) => *v,
Self::Str(s) => s,
}
}
}
impl<'a, T: FormatValue> From<&'a T> for FormatArg<'a> {
fn from(value: &'a T) -> Self {
Self::Ref(value)
}
}
impl<'a> From<&'a str> for FormatArg<'a> {
fn from(value: &'a str) -> Self {
Self::Str(value)
}
}