#[macro_export]
macro_rules! sprintf {
($fmt:expr $(, $arg:expr)* $(,)?) => {
{
let mut target = fish_widestring::WString::new();
$crate::sprintf!(=> &mut target, $fmt, $($arg),*);
target
}
};
(=> $target:expr, $fmt:expr $(, $arg:expr)* $(,)?) => {
{
let _ = fish_printf::sprintf!(=> $target, $fmt, $($arg),*);
}
};
}
#[macro_export]
macro_rules! fprintf {
($fd:expr, $fmt:expr $(, $arg:expr)* $(,)?) => {
{
let wide = $crate::wutil::sprintf!($fmt, $( $arg ),*);
$crate::wutil::unescape_bytes_and_write_to_fd(&wide, $fd);
}
}
}
#[macro_export]
macro_rules! printf {
($fmt:expr $(, $arg:expr)* $(,)?) => {
$crate::fprintf!(libc::STDOUT_FILENO, $fmt $(, $arg)*)
}
}
#[macro_export]
macro_rules! eprintf {
($fmt:expr $(, $arg:expr)* $(,)?) => {
fprintf!(libc::STDERR_FILENO, $fmt $(, $arg)*)
}
}
pub use {eprintf, fprintf, printf, sprintf};
#[cfg(test)]
mod tests {
#[test]
fn test_sprintf() {
assert_eq!(sprintf!("Hello, %s!", "world"), "Hello, world!");
}
}