2 unstable releases
new 0.1.0 | Apr 23, 2025 |
---|---|
0.0.0 | Jul 11, 2024 |
#346 in Text processing
109 downloads per month
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_camel
displayshelloWorld
as_pascal
displaysHelloWorld
as_snake
displayshello_world
as_screaming_snake
displaysHELLO_WORLD
as_kebab
displayshello-world
as_screaming_kebab
displaysHELLO_WORLD
as_train
displaysHello-World
as_lower
displayshello world
as_title
displaysHello World
as_upper
displaysHELLO 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 _bar
is two wordsfoo
andbar
. - A transition from a lowercase letter to an uppercase letter e.g.
fooBar
is two wordsfoo
andBar
. - The second last uppercase letter in a word with multiple uppercase letters
e.g.
FOOBar
is two wordsFOO
andBar
.
The following char
methods are used in the above conditions:
char::is_alphanumeric
is used to determine if a character is a letter/number/symbolchar::is_lowercase
is used to determine if a character is a lowercase letterchar::is_uppercase
is 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 thealloc
feature but is here to allow for forward compatibility with anystd
-only features. -
alloc
— Links thealloc
crate and enables the use ofString
functions.
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.