
Leftpad-rs - omn1
https://github.com/hfiguiere/leftpad-rs
======
lhecker
Your code is a bit inefficient. I took the liberty of fixing that for you:
[https://gist.github.com/lhecker/8e89d998c156f0bfdd2d](https://gist.github.com/lhecker/8e89d998c156f0bfdd2d)

(You can use that code freely and without any attribution if you want to.)

The important part here is to use `String::with_capacity()` to prevent
unnecessary reallocations. Furthermore I used `usize::saturating_sub()`
because it's neat and cleaned up the code with `rustfmt` (which you should
use).

~~~
hub_
btw, creating the string with capacity was in my mind at one point. Some
contributor submitted a PR already

[https://github.com/hfiguiere/leftpad-
rs/pull/2](https://github.com/hfiguiere/leftpad-rs/pull/2)

Sadly it has gathered some rust (pun intended !)

------
jrnkntl
Is there a special reason the tests are all asserting inequality? To me this
only indicates if it doesn't do stuff it's not supposed to do, instead of
working as intended: [https://github.com/hfiguiere/leftpad-
rs/blob/master/src/lib....](https://github.com/hfiguiere/leftpad-
rs/blob/master/src/lib.rs#L29:L39)

[edit] thanks for the explanation, I'm not familiar with rust and just assumed
the bang would mean !=

~~~
palmr
The assert_eq!() calls are calls to the assert equals macro:
[https://doc.rust-lang.org/std/macro.assert_eq!.html](https://doc.rust-
lang.org/std/macro.assert_eq!.html)

In rust macro functions look like functions but end in a bang(!), it's not
using ! to mean negate.
[http://rustbyexample.com/macros.html](http://rustbyexample.com/macros.html)

------
kennywinker
I see i'm not the only one who did this. Leftpad for Swift
[https://github.com/coryalder/SwiftLeftpad](https://github.com/coryalder/SwiftLeftpad)

~~~
lhecker
Your version is quite inefficient too... If you call `insert(_:atIndex:)` N
times it will obviously move the _entire_ content of the string N times by
only a single character.

The optimal solution would be instead if you create a `CollectionType` which
repeats the padding character N times. That way you could use
`insertContentsOf(_:at:)` to insert N characters at once into the string and
move the contents of the string only once.

If that doesn't work for you might as well simply allocate a new `String`,
reserve `pad` chars of space, insert the `pad` chars and then insert the
previous string. Even that is probably still faster than your previous
approach.

In the end it's still probably the easiest approach in practice to simply use
the `NSString` method
`stringByPaddingToLength(_:withString:startingAtIndex:)`... :D

~~~
kennywinker
Thanks for the code review. To me this is the ultimate irony of this whole
thing. Many have read it as "you should have written your own leftpad
function, it's 11 lines!!" But no bit of code is too short to be buggy /
inefficient. Centralizing it allows us to optimize/fix once.

While my implementation is basically a direct port of node's leftpad, pull
requests are welcome. :)

------
zelcon5
Lol this is all pretty funny. I also did this but in C++ to make fun of that
JS crap.

[https://gist.github.com/zelcon5/7dc42bf91ea958132a0d](https://gist.github.com/zelcon5/7dc42bf91ea958132a0d)

\- "padding" can go either left or right.

\- generic function

\- minimal lines of code

Wow so great, make me a dependency for Windows11, Apache, Firefox, and
toasters.

------
foota
I'd hate to see how the borrow checker destroys objects lent to remote
systems... Along the vein of [https://xkcd.com/416/](https://xkcd.com/416/)

------
DanSmooth
inb4 "leftpad-as-a-service"...

~~~
po1nter
too late: [http://left-pad.io/](http://left-pad.io/)

~~~
pzone
Oh my god, I'm crying

------
venomsnake
Leftpad should be the new fizzbuzz in interviews.

~~~
hub_
there is a big irony in that comment... (very personal to me - that no one can
get here)

------
xgbi
So, what is the point of this? Highlight that it is possible to do to Cargo
what leftpad has made to NPM?

~~~
cornstalks
Satire, most likely.

~~~
tomtomtom777
Or aiming for > 2000000 downloads ;)

~~~
hub_
definitely not.

