2 unstable releases

new 0.1.0 Apr 23, 2025
0.0.0 Jul 11, 2024

#346 in Text processing

Download history 2/week @ 2025-02-01 1/week @ 2025-02-22 2/week @ 2025-03-01 109/week @ 2025-04-19

109 downloads per month

MIT/Apache

22KB
238 lines

anycase

Crates.io Version Docs.rs Latest Build Status

💼 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!:

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 words foo and bar.
  • A transition from a lowercase letter to an uppercase letter e.g. fooBar is two words foo and Bar.
  • The second last uppercase letter in a word with multiple uppercase letters e.g. FOOBar is two words FOO and Bar.

The following char methods are used in the above conditions:

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 the alloc feature but is here to allow for forward compatibility with any std-only features.

  • alloc — Links the alloc crate and enables the use of String 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.

No runtime deps