leftpad_str/
lib.rs

1//! # `leftpad-str` crate.
2//! Obviously the best crate for the Rust programming language. The crate serves the only goal of implementing `leftpad` function:
3//!
4//! ```rs
5//! pub fn leftpad(input: &str, width: usize, padding_char: char) -> String;
6//! ```
7
8#![doc(
9    html_logo_url = "https://raw.githubusercontent.com/abs0luty/leftpad/main/logo.png",
10    html_favicon_url = "https://raw.githubusercontent.com/abs0luty/leftpad/main/logo.png"
11)]
12#![cfg_attr(not(test), forbid(clippy::unwrap_used))]
13#![warn(missing_docs, clippy::dbg_macro)]
14#![deny(
15    // rustc lint groups https://doc.rust-lang.org/rustc/lints/groups.html
16    warnings,
17    future_incompatible,
18    let_underscore,
19    nonstandard_style,
20    rust_2018_compatibility,
21    rust_2018_idioms,
22    rust_2021_compatibility,
23    unused,
24    // rustc allowed-by-default lints https://doc.rust-lang.org/rustc/lints/listing/allowed-by-default.html
25    macro_use_extern_crate,
26    meta_variable_misuse,
27    missing_abi,
28    missing_copy_implementations,
29    missing_debug_implementations,
30    non_ascii_idents,
31    noop_method_call,
32    single_use_lifetimes,
33    trivial_casts,
34    trivial_numeric_casts,
35    unreachable_pub,
36    unsafe_op_in_unsafe_fn,
37    unused_crate_dependencies,
38    unused_import_braces,
39    unused_lifetimes,
40    unused_qualifications,
41    unused_tuple_struct_fields,
42    variant_size_differences,
43    // rustdoc lints https://doc.rust-lang.org/rustdoc/lints.html
44    rustdoc::broken_intra_doc_links,
45    rustdoc::private_intra_doc_links,
46    rustdoc::missing_crate_level_docs,
47    rustdoc::private_doc_tests,
48    rustdoc::invalid_codeblock_attributes,
49    rustdoc::invalid_rust_codeblocks,
50    rustdoc::bare_urls,
51    // clippy categories https://doc.rust-lang.org/clippy/
52    clippy::all,
53    clippy::correctness,
54    clippy::suspicious,
55    clippy::style,
56    clippy::complexity,
57    clippy::perf,
58    clippy::pedantic,
59    clippy::nursery,
60)]
61#![allow(
62    clippy::module_name_repetitions,
63    clippy::too_many_lines,
64    clippy::option_if_let_else
65)]
66
67/// Pads the given string on the left with a specified character up to a specified width.
68///
69/// # Arguments
70///
71/// * `input` - The string to be padded.
72/// * `width` - The desired width of the resulting padded string.
73/// * `padding_char` - The character used for padding.
74///
75/// # Examples
76///
77/// ```
78/// use leftpad::leftpad;
79///
80/// assert_eq!(leftpad("hello", 8, '*'), "***hello");
81/// assert_eq!(leftpad("rust", 6, ' '), "  rust");
82/// ```
83#[must_use]
84pub fn leftpad(input: &str, width: usize, padding_char: char) -> String {
85    input
86        .chars()
87        .rev()
88        .chain(std::iter::repeat(padding_char))
89        .take(width)
90        .collect::<String>()
91        .chars()
92        .rev()
93        .collect::<String>()
94}