Rustlers Atom 1.10: Formatting
<figure class="video" style="margin:0;">
<div style="position:relative;width:100%;padding-bottom:56.25%;height:0;overflow:hidden;">
<iframe src="https://www.youtube.com/embed/Yskw2HuuY28?si=SlHC6evEjsOMKC9X"
title="YouTube video player"
style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen></iframe>
</div>
</figure>
Rust’s formatting is compile-time checked. Placeholders must match the values and the traits they implement.
This are the available macros:
println!prints to stdout with a newline.print!prints without a newline.eprintln!prints to stderr.format!builds aString(no I/O).
println!("Hello, {}!", "world");
let s = format!("{} + {} = {}", 2, 3, 2 + 3);Formatting use this Placeholders and specifiers:
{}→ uses the value’s Display human-readable implementation.{:?}→ uses Debug (requires#[derive(Debug)]).{:#?}→ pretty-printed Debug.- Named and positional arguments.
- Common format flags.
println!("{0} {0} {1}", "echo", 42);
println!("{lang} {ver}", lang="Rust", ver=2021);
println!("{:>6}", 42); // right align width 6: " 42"
println!("{:<6}", 42); // left align
println!("{:^6}", 42); // center
println!("{:06}", 42); // zero-pad: "000042"
println!("{:.3}", 3.14159); // precision for floats: "3.142"
println!("{:#x}", 255); // hex with 0x: "0xff"
println!("{:b}", 13); // binary: "1101"
println!("{:+}", 7); // explicit sign: "+7"Width and precision can come from args:
let w = 8;
let p = 3;
println!("{:0width$.prec$}", 3.14159, width=w, prec=p); // "00003.142"Writing into buffers/streams#
format_args! powers all these macros. You can write to any std::fmt::Write or std::io::Write target.
use std::fmt::Write as _;
let mut s = String::new();
write!(&mut s, "Pi ≈ {:.3}", 3.14159).unwrap();
assert_eq!(s, "Pi ≈ 3.142");For files/sockets (I/O), use std::io::Write:
use std::io::{Write, stdout};
writeln!(stdout(), "Hi {}", "there")?;