Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::fmt::{self, Write, Alignment};
- struct ExtraWidth {
- num: u32,
- width: usize,
- }
- impl fmt::Display for ExtraWidth {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- let width = self.width + f.width().unwrap_or(0);
- let mut buff = String::new();
- write!(buff, "{}", self.num)?;
- let padding = width.saturating_sub(buff.len());
- let (pre_padding, post_padding) = match f.align() {
- None => (0, padding),
- Some(Alignment::Left) => (0, padding),
- Some(Alignment::Right) => (padding, 0),
- Some(Alignment::Center) => (padding / 2, (padding + 1) / 2),
- };
- for _ in 0..pre_padding {
- write!(f, "{}", f.fill())?;
- }
- f.write_str(&buff)?;
- for _ in 0..post_padding {
- write!(f, "{}", f.fill())?;
- }
- Ok(())
- }
- }
- fn main() {
- println!("{:0>2}", ExtraWidth { num: 1, width: 2 });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement