Rollup merge of #100953 - joshtriplett:write-docs, r=Mark-Simulacrum
Update documentation for `write!` and `writeln!` https://github.com/rust-lang/rust/pull/37472 added this documentation, but it needs updating: - Remove some documentation duplicated between `writeln!` and `write!` - Update `write!` docs: can now import traits as `_` to avoid conflicts - Expand example to show how to implement qualified trait names
This commit is contained in:
commit
f4d4a40a7c
@ -457,11 +457,12 @@ macro_rules! r#try {
|
||||
///
|
||||
/// A module can import both `std::fmt::Write` and `std::io::Write` and call `write!` on objects
|
||||
/// implementing either, as objects do not typically implement both. However, the module must
|
||||
/// import the traits qualified so their names do not conflict:
|
||||
/// avoid conflict between the trait names, such as by importing them as `_` or otherwise renaming
|
||||
/// them:
|
||||
///
|
||||
/// ```
|
||||
/// use std::fmt::Write as FmtWrite;
|
||||
/// use std::io::Write as IoWrite;
|
||||
/// use std::fmt::Write as _;
|
||||
/// use std::io::Write as _;
|
||||
///
|
||||
/// fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
/// let mut s = String::new();
|
||||
@ -474,6 +475,23 @@ macro_rules! r#try {
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// If you also need the trait names themselves, such as to implement one or both on your types,
|
||||
/// import the containing module and then name them with a prefix:
|
||||
///
|
||||
/// ```
|
||||
/// # #![allow(unused_imports)]
|
||||
/// use std::fmt::{self, Write as _};
|
||||
/// use std::io::{self, Write as _};
|
||||
///
|
||||
/// struct Example;
|
||||
///
|
||||
/// impl fmt::Write for Example {
|
||||
/// fn write_str(&mut self, _s: &str) -> core::fmt::Result {
|
||||
/// unimplemented!();
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// Note: This macro can be used in `no_std` setups as well.
|
||||
/// In a `no_std` setup you are responsible for the implementation details of the components.
|
||||
///
|
||||
@ -526,25 +544,6 @@ macro_rules! write {
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// A module can import both `std::fmt::Write` and `std::io::Write` and call `write!` on objects
|
||||
/// implementing either, as objects do not typically implement both. However, the module must
|
||||
/// import the traits qualified so their names do not conflict:
|
||||
///
|
||||
/// ```
|
||||
/// use std::fmt::Write as FmtWrite;
|
||||
/// use std::io::Write as IoWrite;
|
||||
///
|
||||
/// fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
/// let mut s = String::new();
|
||||
/// let mut v = Vec::new();
|
||||
///
|
||||
/// writeln!(&mut s, "{} {}", "abc", 123)?; // uses fmt::Write::write_fmt
|
||||
/// writeln!(&mut v, "s = {:?}", s)?; // uses io::Write::write_fmt
|
||||
/// assert_eq!(v, b"s = \"abc 123\\n\"\n");
|
||||
/// Ok(())
|
||||
/// }
|
||||
/// ```
|
||||
#[macro_export]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[cfg_attr(not(test), rustc_diagnostic_item = "writeln_macro")]
|
||||
|
Loading…
x
Reference in New Issue
Block a user