print.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. pub use crate::{eprint, eprintln, print, println};
  2. #[doc(hidden)]
  3. pub struct StdoutPrinter;
  4. impl core::fmt::Write for StdoutPrinter {
  5. fn write_str(&mut self, s: &str) -> core::fmt::Result {
  6. unsafe { libc::printf(b"%.*s\0".as_ptr() as _, s.len() as i32, s.as_ptr()) };
  7. Ok(())
  8. }
  9. }
  10. #[doc(hidden)]
  11. pub struct StderrPrinter;
  12. impl core::fmt::Write for StderrPrinter {
  13. fn write_str(&mut self, s: &str) -> core::fmt::Result {
  14. unsafe { libc::write(libc::STDERR_FILENO, s.as_ptr() as _, s.len() as _) };
  15. Ok(())
  16. }
  17. }
  18. #[macro_export]
  19. macro_rules! println {
  20. ($($arg:tt)*) => ({
  21. use core::fmt::Write;
  22. let _ = core::writeln!($crate::print::StdoutPrinter, $($arg)*);
  23. })
  24. }
  25. #[macro_export]
  26. macro_rules! print {
  27. ($($arg:tt)*) => ({
  28. use core::fmt::Write;
  29. let _ = core::writeln!($crate::print::StdoutPrinter, $($arg)*);
  30. })
  31. }
  32. #[macro_export]
  33. macro_rules! eprintln {
  34. ($($arg:tt)*) => ({
  35. use core::fmt::Write;
  36. let _ = core::writeln!($crate::print::StderrPrinter, $($arg)*);
  37. })
  38. }
  39. #[macro_export]
  40. macro_rules! eprint {
  41. ($($arg:tt)*) => ({
  42. use core::fmt::Write;
  43. let _ = core::writeln!($crate::print::StderrPrinter, $($arg)*);
  44. })
  45. }