# newline-converter `newline-converter` is a simple library used for converting the newline characters in strings between Windows `\r\n` and Unix `\n` style. It mainly serves as a backend for [Rust Newline converter](https://github.com/spitfire05/rnc) CLI tool. [![Crates.io](https://img.shields.io/crates/v/newline-converter)](https://crates.io/crates/newline-converter) ## Comparision of newline-wrangling methods ### newline-converter (this crate) - ✅ Properly handles edge-cases like lone `\r` characters. For example, `\r\n` sequences won't become `\r\r\n` after `unix2dos` call: ```rust use newline_converter::unix2dos; assert_eq!( unix2dos("\nfoo\r\nbar\n"), "\r\nfoo\rbar\n" ); ``` - ✅ Is the fastest when input data is small (few bytes of text with line breaks). - ❌ Is the slowest (or second slowest in case of `unix2dos`) when dealing with larger data sets (ex. 100 paragraphs of [Lorem Ipsum](https://www.lipsum.com/)). ### `string.replace` - ❌ Does not handle edge cases properly in `unix2dos`. - ✅ Good performance on larger data sets. ### [regex](https://crates.io/crates/regex) crate `Regex::replace_all` - ❌ Does not handle edge cases properly in `unix2dos`, because of lack of support for look around. - ✅ The best performance with larger data sets. ### [fancy-regex](https://crates.io/crates/fancy-regex) crate `Regex::replace_all` - ✅ Properly handles edge cases. - ❌ `unix2dos` has worst performance of all implementations, by an order of magnitude (because of look around used). Look into `benches/bench.rs` for the comparision benchmarks. ## MSRV Minimum Supported Rust Version is `1.38.0`.