1 # **heck** is a case conversion library
3 !["I specifically requested the opposite of this."](./no_step_on_snek.png)
5 This library exists to provide case conversion between common cases like
6 CamelCase and snake_case. It is intended to be unicode aware, internally
7 consistent, and reasonably well performing.
9 ## Definition of a word boundary
11 Word boundaries are defined as the "unicode words" defined in the
12 `unicode_segmentation` library, as well as within those words in this manner:
14 1. All underscore characters are considered word boundaries.
15 2. If an uppercase character is followed by lowercase letters, a word boundary
16 is considered to be just prior to that uppercase character.
17 3. If multiple uppercase characters are consecutive, they are considered to be
18 within a single word, except that the last will be part of the next word if it
19 is followed by lowercase characters (see rule 2).
21 That is, "HelloWorld" is segmented `Hello|World` whereas "XMLHttpRequest" is
22 segmented `XML|Http|Request`.
24 Characters not within words (such as spaces, punctuations, and underscores)
25 are not included in the output string except as they are a part of the case
26 being converted to. Multiple adjacent word boundaries (such as a series of
27 underscores) are folded into one. ("hello__world" in snake case is therefore
28 "hello_world", not the exact same string). Leading or trailing word boundary
29 indicators are dropped, except insofar as CamelCase capitalizes the first word.
31 ## Cases contained in this library:
43 PRs of additional well-established cases welcome.
45 This library is a little bit opinionated (dropping punctuation, for example).
46 If that doesn't fit your use case, I hope there is another crate that does. I
47 would prefer **not** to receive PRs to make this behavior more configurable.
49 Bug reports & fixes always welcome. :-)
53 The minimum supported Rust version for this crate is 1.32.0. This may change in
54 minor or patch releases, but we probably won't ever require a very recent
55 version. If you would like to have a stronger guarantee than that, please open
60 heck is distributed under the terms of both the MIT license and the
61 Apache License (Version 2.0).
63 See LICENSE-APACHE and LICENSE-MIT for details.