#![warn(missing_docs)]
#![forbid(unsafe_code)]
mod tracing_macros;
mod core_sequences;
mod display;
pub mod layout;
mod path;
mod symbols;
mod theme;
mod types;
mod diff;
mod report;
mod sequences;
mod same;
pub use core_sequences::{Interspersed, ReplaceGroup, Updates, UpdatesGroup};
pub use path::*;
pub use symbols::*;
pub use theme::*;
pub use types::*;
pub use diff::{
DiffFormat, DiffOptions, FacetDiff, LeafChange, LeafChangeKind, collect_leaf_changes,
diff_new_peek, diff_new_peek_with_options, format_diff, format_diff_compact,
format_diff_compact_plain, format_diff_default,
};
pub use report::DiffReport;
pub use layout::{
AnsiBackend, BuildOptions, ColorBackend, DiffFlavor, JsonFlavor, PlainBackend, RenderOptions,
RustFlavor, XmlFlavor, build_layout, render_to_string,
};
pub use same::{
SameOptions, SameReport, Sameness, check_same, check_same_report, check_same_with,
check_same_with_report, check_sameish, check_sameish_report, check_sameish_with,
check_sameish_with_report,
};
#[macro_export]
macro_rules! assert_same {
($left:expr, $right:expr $(,)?) => {
match $crate::check_same(&$left, &$right) {
$crate::Sameness::Same => {}
$crate::Sameness::Different(diff) => {
panic!(
"assertion `assert_same!(left, right)` failed\n\n{diff}\n"
);
}
$crate::Sameness::Opaque { type_name } => {
panic!(
"assertion `assert_same!(left, right)` failed: cannot compare opaque type `{type_name}`"
);
}
}
};
($left:expr, $right:expr, $($arg:tt)+) => {
match $crate::check_same(&$left, &$right) {
$crate::Sameness::Same => {}
$crate::Sameness::Different(diff) => {
panic!(
"assertion `assert_same!(left, right)` failed: {}\n\n{diff}\n",
format_args!($($arg)+)
);
}
$crate::Sameness::Opaque { type_name } => {
panic!(
"assertion `assert_same!(left, right)` failed: {}: cannot compare opaque type `{type_name}`",
format_args!($($arg)+)
);
}
}
};
}
#[macro_export]
macro_rules! assert_same_with {
($left:expr, $right:expr, $options:expr $(,)?) => {
match $crate::check_same_with(&$left, &$right, $options) {
$crate::Sameness::Same => {}
$crate::Sameness::Different(diff) => {
panic!(
"assertion `assert_same_with!(left, right, options)` failed\n\n{diff}\n"
);
}
$crate::Sameness::Opaque { type_name } => {
panic!(
"assertion `assert_same_with!(left, right, options)` failed: cannot compare opaque type `{type_name}`"
);
}
}
};
($left:expr, $right:expr, $options:expr, $($arg:tt)+) => {
match $crate::check_same_with(&$left, &$right, $options) {
$crate::Sameness::Same => {}
$crate::Sameness::Different(diff) => {
panic!(
"assertion `assert_same_with!(left, right, options)` failed: {}\n\n{diff}\n",
format_args!($($arg)+)
);
}
$crate::Sameness::Opaque { type_name } => {
panic!(
"assertion `assert_same_with!(left, right, options)` failed: {}: cannot compare opaque type `{type_name}`",
format_args!($($arg)+)
);
}
}
};
}
#[macro_export]
macro_rules! debug_assert_same {
($($arg:tt)*) => {
if cfg!(debug_assertions) {
$crate::assert_same!($($arg)*);
}
};
}
#[macro_export]
macro_rules! debug_assert_same_with {
($($arg:tt)*) => {
if cfg!(debug_assertions) {
$crate::assert_same_with!($($arg)*);
}
};
}
#[macro_export]
macro_rules! assert_sameish {
($left:expr, $right:expr $(,)?) => {
match $crate::check_sameish(&$left, &$right) {
$crate::Sameness::Same => {}
$crate::Sameness::Different(diff) => {
panic!(
"assertion `assert_sameish!(left, right)` failed\n\n{diff}\n"
);
}
$crate::Sameness::Opaque { type_name } => {
panic!(
"assertion `assert_sameish!(left, right)` failed: cannot compare opaque type `{type_name}`"
);
}
}
};
($left:expr, $right:expr, $($arg:tt)+) => {
match $crate::check_sameish(&$left, &$right) {
$crate::Sameness::Same => {}
$crate::Sameness::Different(diff) => {
panic!(
"assertion `assert_sameish!(left, right)` failed: {}\n\n{diff}\n",
format_args!($($arg)+)
);
}
$crate::Sameness::Opaque { type_name } => {
panic!(
"assertion `assert_sameish!(left, right)` failed: {}: cannot compare opaque type `{type_name}`",
format_args!($($arg)+)
);
}
}
};
}
#[macro_export]
macro_rules! assert_sameish_with {
($left:expr, $right:expr, $options:expr $(,)?) => {
match $crate::check_sameish_with(&$left, &$right, $options) {
$crate::Sameness::Same => {}
$crate::Sameness::Different(diff) => {
panic!(
"assertion `assert_sameish_with!(left, right, options)` failed\n\n{diff}\n"
);
}
$crate::Sameness::Opaque { type_name } => {
panic!(
"assertion `assert_sameish_with!(left, right, options)` failed: cannot compare opaque type `{type_name}`"
);
}
}
};
($left:expr, $right:expr, $options:expr, $($arg:tt)+) => {
match $crate::check_sameish_with(&$left, &$right, $options) {
$crate::Sameness::Same => {}
$crate::Sameness::Different(diff) => {
panic!(
"assertion `assert_sameish_with!(left, right, options)` failed: {}\n\n{diff}\n",
format_args!($($arg)+)
);
}
$crate::Sameness::Opaque { type_name } => {
panic!(
"assertion `assert_sameish_with!(left, right, options)` failed: {}: cannot compare opaque type `{type_name}`",
format_args!($($arg)+)
);
}
}
};
}
#[macro_export]
macro_rules! debug_assert_sameish {
($($arg:tt)*) => {
if cfg!(debug_assertions) {
$crate::assert_sameish!($($arg)*);
}
};
}
#[macro_export]
macro_rules! debug_assert_sameish_with {
($($arg:tt)*) => {
if cfg!(debug_assertions) {
$crate::assert_sameish_with!($($arg)*);
}
};
}
#[cfg(test)]
mod tests {
#[test]
fn it_works() {}
}