# rust-pad [![pad on crates.io](http://meritbadge.herokuapp.com/pad)](https://crates.io/crates/pad) [![Build status](https://travis-ci.org/ogham/rust-pad.svg?branch=master)](https://travis-ci.org/ogham/rust-pad) This is a library for padding strings at runtime. It provides four helper functions for the most common use cases, and one main function to cover the other cases. ### [View the Rustdoc](https://docs.rs/pad) # Installation This crate works with [Cargo](http://crates.io). Add the following to your `Cargo.toml` dependencies section: ```toml [dependencies] pad = "0.1" ``` # Padding in the stdlib **You do not need this crate for simple padding!** It’s possible to pad strings using the Rust standard library. For example, to pad a number with zeroes: ```rust // Padding using std::fmt assert_eq!("0000012345", format!("{:0>10}", 12345)); ``` You can even use a variable for the padding width: ```rust // Padding using std::fmt assert_eq!("hello ", format!("{:width$}", "hello", width=12)); ``` The [Rust documentation for `std::fmt`](https://doc.rust-lang.org/std/fmt/) contains more examples. The rest of the examples will use the `pad` crate. # Usage You can pad a string to have a minimum width with the `pad_to_width` method: ```rust use pad::PadStr; println!("{}", "Hi there!".pad_to_width(16)); ``` This will print out “Hi there!” followed by seven spaces, which is the number of spaces necessary to bring it up to a total of sixteen characters wide. String length is determined with the [unicode_width](https://unicode-rs.github.io/unicode-width/unicode_width/index.html) crate, without assuming CJK. ## Alignment By default, strings are left-aligned: any extra characters are added on the right. To change this, pass in an `Alignment` value: ```rust use pad::{PadStr, Alignment}; let s = "I'm over here".pad_to_width_with_alignment(20, Alignment::Right); ``` There are four of these in total: - **Left**, which puts the text on the left and spaces on the right; - **Right**, which puts the text on the right and spaces on the left; - **Middle**, which centres the text evenly, putting it slightly to the left if it can’t be exactly centered; - **MiddleRight**, as above, but to the right. ## Characters Another thing that’s set by default is the character that’s used to pad the strings — by default, it’s space, but you can change it: ```rust use pad::PadStr; let s = "Example".pad_to_width_with_char(10, '_'); ``` ## Truncation Finally, you can override what happens when a value exceeds the width you give. By default, the width parameter indicates a *minimum width*: any string less will be padded, but any string greater will still be returned in its entirety. You can instead tell it to pad with a maximum value, which will truncate the input when a string longer than the width is passed in. ```rust use pad::PadStr; let short = "short".with_exact_width(10); // "short " let long = "this string is long".with_exact_width(10); // "this strin" ``` # A Full Example All of the above functions delegate to the `pad` function, which you can use in special cases. Here, in order to **right**-pad a number with **zeroes**, pass in all the arguments: ```rust use pad::{PadStr, Alignment}; let s = "12345".pad(10, '0', Alignment::Right, true); ``` (The `true` at the end could just as easily be `false`. It’s whether to truncate or not.) # A Note on Debugging One very last point: the width function takes a `usize`, rather than a signed number type. This means that if you try to pass in a negative size, it’ll wrap around to a positive size, and produce a massive string and possibly crash your program. So if your padding calls are failing for some reason, this is probably why.