macro_rules! impl_primitive {
($trait:ty, $($primitive:ty)+) => {
$(impl $trait for $primitive {
fn format(
&self,
formatter: &mut Formatter,
_: Nesting,
) -> fmt::Result {
write!(formatter, "{}", self)
}
})+
};
}
macro_rules! impl_primitives {
($trait:ty) => {
impl_primitive!(
$trait, u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize f32 f64
bool
);
};
}
macro_rules! impl_tuple {
($trait:ident; $($type:ident)+) => {
impl<$($type,)+> $trait for ($($type,)+)
where
$($type: $trait,)+
{
fn format(
&self,
formatter: &mut Formatter,
nesting: Nesting,
) -> fmt::Result {
#[allow(non_snake_case)]
let ($($type,)+) = self;
$($type.format(formatter, nesting)?;)+
Ok(())
}
}
};
}
macro_rules! impl_tuples {
($trait:ident) => {
impl_tuple!($trait; A B);
impl_tuple!($trait; A B C);
impl_tuple!($trait; A B C D);
impl_tuple!($trait; A B C D E);
impl_tuple!($trait; A B C D E F);
impl_tuple!($trait; A B C D E F G);
impl_tuple!($trait; A B C D E F G H);
impl_tuple!($trait; A B C D E F G H I);
impl_tuple!($trait; A B C D E F G H I J);
impl_tuple!($trait; A B C D E F G H I J K);
};
}
pub mod html;
pub mod markdown_v2;
pub use html::html;
pub use markdown_v2::markdown_v2;
mod bold;
mod code_block;
mod inline_code;
mod italic;
mod link;
mod raw;
mod strikethrough;
mod underline;
pub use bold::{bold, Bold};
pub use code_block::{code_block, CodeBlock};
pub use inline_code::{inline_code, InlineCode};
pub use italic::{italic, Italic};
pub use link::{link, mention, Link};
pub use raw::{raw, Raw};
pub use strikethrough::{strikethrough, Strikethrough};
pub use underline::{underline, Underline};
pub trait Formattable: markdown_v2::Formattable + html::Formattable {}
impl<T: markdown_v2::Formattable + html::Formattable> Formattable for T {}
#[doc(hidden)]
#[derive(Clone, Copy, Default)]
#[allow(clippy::struct_excessive_bools)]
pub struct Nesting {
bold: bool,
italic: bool,
strikethrough: bool,
underline: bool,
}