Skip to content

Commit

Permalink
refactor(stream): Pull out test macro body
Browse files Browse the repository at this point in the history
Share more code and reduce binary bloat
  • Loading branch information
epage committed Nov 4, 2024
1 parent c78b3c1 commit 69cf6c9
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 58 deletions.
83 changes: 28 additions & 55 deletions crates/anstream/src/_macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,17 +61,8 @@
macro_rules! print {
($($arg:tt)*) => {{
if cfg!(any(feature = "test", test)) {
use std::io::Write as _;

let stdio = std::io::stdout();
let choice = $crate::AutoStream::choice(&stdio);
let buffer = Vec::new();
let mut stream = $crate::AutoStream::new(buffer, choice);
// Ignore errors rather than panic
let _ = ::std::write!(&mut stream, $($arg)*);
let buffer = stream.into_inner();
// Should be UTF-8 but not wanting to panic
let buffer = String::from_utf8_lossy(&buffer);
let target_stream = std::io::stdout();
let buffer = $crate::_macros::to_adapted_string(&format_args!($($arg)*), &target_stream);
::std::print!("{}", buffer)
} else {
use std::io::Write as _;
Expand Down Expand Up @@ -142,17 +133,8 @@ macro_rules! println {
};
($($arg:tt)*) => {{
if cfg!(any(feature = "test", test)) {
use std::io::Write as _;

let stdio = std::io::stdout();
let choice = $crate::AutoStream::choice(&stdio);
let buffer = Vec::new();
let mut stream = $crate::AutoStream::new(buffer, choice);
// Ignore errors rather than panic
let _ = ::std::write!(&mut stream, $($arg)*);
let buffer = stream.into_inner();
// Should be UTF-8 but not wanting to panic
let buffer = String::from_utf8_lossy(&buffer);
let target_stream = std::io::stdout();
let buffer = $crate::_macros::to_adapted_string(&format_args!($($arg)*), &target_stream);
::std::println!("{}", buffer)
} else {
use std::io::Write as _;
Expand Down Expand Up @@ -202,17 +184,8 @@ macro_rules! println {
macro_rules! eprint {
($($arg:tt)*) => {{
if cfg!(any(feature = "test", test)) {
use std::io::Write as _;

let stdio = std::io::stderr();
let choice = $crate::AutoStream::choice(&stdio);
let buffer = Vec::new();
let mut stream = $crate::AutoStream::new(buffer, choice);
// Ignore errors rather than panic
let _ = ::std::write!(&mut stream, $($arg)*);
let buffer = stream.into_inner();
// Should be UTF-8 but not wanting to panic
let buffer = String::from_utf8_lossy(&buffer);
let target_stream = std::io::stderr();
let buffer = $crate::_macros::to_adapted_string(&format_args!($($arg)*), &target_stream);
::std::eprint!("{}", buffer)
} else {
use std::io::Write as _;
Expand Down Expand Up @@ -265,17 +238,8 @@ macro_rules! eprintln {
};
($($arg:tt)*) => {{
if cfg!(any(feature = "test", test)) {
use std::io::Write as _;

let stdio = std::io::stderr();
let choice = $crate::AutoStream::choice(&stdio);
let buffer = Vec::new();
let mut stream = $crate::AutoStream::new(buffer, choice);
// Ignore errors rather than panic
let _ = ::std::write!(&mut stream, $($arg)*);
let buffer = stream.into_inner();
// Should be UTF-8 but not wanting to panic
let buffer = String::from_utf8_lossy(&buffer);
let target_stream = std::io::stderr();
let buffer = $crate::_macros::to_adapted_string(&format_args!($($arg)*), &target_stream);
::std::eprintln!("{}", buffer)
} else {
use std::io::Write as _;
Expand Down Expand Up @@ -373,17 +337,26 @@ macro_rules! panic {
::std::panic!()
};
($($arg:tt)*) => {{
use std::io::Write as _;

let panic_stream = std::io::stderr();
let choice = $crate::AutoStream::choice(&panic_stream);
let buffer = Vec::new();
let mut stream = $crate::AutoStream::new(buffer, choice);
// Ignore errors rather than panic
let _ = ::std::write!(&mut stream, $($arg)*);
let buffer = stream.into_inner();
// Should be UTF-8 but not wanting to panic
let buffer = String::from_utf8_lossy(&buffer).into_owned();
let target_stream = std::io::stderr();
let buffer = $crate::_macros::to_adapted_string(&format_args!($($arg)*), &target_stream);
::std::panic!("{}", buffer)
}};
}

#[cfg(feature = "auto")]
pub fn to_adapted_string(
display: &dyn std::fmt::Display,
stream: &impl crate::stream::RawStream,
) -> String {
use std::io::Write as _;

let choice = crate::AutoStream::choice(stream);
let buffer = Vec::new();
let mut stream = crate::AutoStream::new(buffer, choice);
// Ignore errors rather than panic
let _ = ::std::write!(&mut stream, "{display}");
let buffer = stream.into_inner();
// Should be UTF-8 but not wanting to panic
let buffer = String::from_utf8_lossy(&buffer).into_owned();
buffer
}
7 changes: 4 additions & 3 deletions crates/anstream/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,12 @@

pub mod adapter;
pub mod stream;

mod buffer;
#[doc(hidden)]
#[macro_use]
mod _macros;
pub mod _macros;

mod auto;
mod buffer;
mod fmt;
mod strip;
#[cfg(all(windows, feature = "wincon"))]
Expand Down

0 comments on commit 69cf6c9

Please sign in to comment.