2 unstable releases
| 0.1.0 | Apr 23, 2025 |
|---|---|
| 0.0.0 | Jul 11, 2024 |
#718 in Text processing
28 downloads per month
Used in 2 crates
(via basic-oop-macro)
22KB
238 lines
anycase
💼 A case conversion library for Rust.
🚀 Getting started
First, add the anycase crate to your Cargo manifest.
cargo add anycase
Then you can use the as_<case> function to get a Display type.
let s = format!("snake case: {}", anycase::as_snake("Hello world!"));
assert_eq!(s, "snake case: hello_world");
Alternatively, you can use the to_<case> function to get a String.
let s = anycase::to_snake("Hello world!");
assert_eq!(s, "hello_world");
🤸 Usage
The anycase crate provides a set of functions to convert strings between
different case styles. The following cases are available.
Given an input of Hello world!:
as_cameldisplayshelloWorldas_pascaldisplaysHelloWorldas_snakedisplayshello_worldas_screaming_snakedisplaysHELLO_WORLDas_kebabdisplayshello-worldas_screaming_kebabdisplaysHELLO_WORLDas_traindisplaysHello-Worldas_lowerdisplayshello worldas_titledisplaysHello Worldas_upperdisplaysHELLO WORLD
For all of the above functions, you can use the to_<case> variant to get a
String instead of a Display type.
Additionally, the crate provides the raw module containing the raw
functions which can be used to implement custom case conversion functions.
use anycase::raw;
let input = "Hello world!";
let output = raw::to_string(input, raw::write_upper, raw::delim_fn("."));
assert_eq!(output, "HELLO.WORLD");
See the module level documentation for more details.
How does it work?
This implementation divides the input string into words and applies a “word function” to each word and calls a “delimiter function” for each word boundary (the space between words).
Word boundaries are defined as follows:
- A set of consecutive non-letter/number/symbol e.g.
foo _baris two wordsfooandbar. - A transition from a lowercase letter to an uppercase letter e.g.
fooBaris two wordsfooandBar. - The second last uppercase letter in a word with multiple uppercase letters
e.g.
FOOBaris two wordsFOOandBar.
The following char methods are used in the above conditions:
char::is_alphanumericis used to determine if a character is a letter/number/symbolchar::is_lowercaseis used to determine if a character is a lowercase letterchar::is_uppercaseis used to determine if a character is an uppercase letter
Features
This crate is designed to be no_std compatible. This is made possible by
disabling all default features. The following features are available:
-
std(enabled by default) — Currently only enables theallocfeature but is here to allow for forward compatibility with anystd-only features. -
alloc— Links thealloccrate and enables the use ofStringfunctions.
MSRV
The minimum supported Rust version (MSRV) is 1.56.0. The policy of this crate is to only increase the MSRV in a breaking release.
License
This project is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT for details.