#snake-case #string


SnakeCase is a String-like type that can only contain valid non-empty snake_case

5 unstable releases

0.3.1 Mar 13, 2021
0.3.0 Mar 13, 2021
0.2.1 Mar 13, 2021
0.2.0 Sep 25, 2019
0.1.0 Sep 24, 2019

#1004 in Data structures

Download history 81/week @ 2022-06-13 73/week @ 2022-06-20 42/week @ 2022-06-27 66/week @ 2022-07-04 16/week @ 2022-07-11 34/week @ 2022-07-18 25/week @ 2022-07-25 72/week @ 2022-08-01 123/week @ 2022-08-08 157/week @ 2022-08-15 125/week @ 2022-08-22 84/week @ 2022-08-29 274/week @ 2022-09-05 504/week @ 2022-09-12 494/week @ 2022-09-19 466/week @ 2022-09-26

1,739 downloads per month
Used in diffus

MIT license

216 lines


Latest version Documentation Build Status MIT

A Rust crate for working with snake_case identifiers

The purpose of this crate is to expose the type SnakeCase, a wrapper around a String that can only contain valid, non-empty snake_case without leading digits. In other words, it always matches ^[_a-z][_a-z0-9]*$

  • Non-empty
  • Starts with a lower case ASCII letter or underscore
  • Contains only lower case ASCII letters, underscores and digits

NOTE: ___foo__bar_ is considered valid snake case by this crate.

TL;DR: SnakeCase can hold any string that is also a valid lower case identifier in Rust.


The common case for this is unique identifiers, for which snake case is perfectly suited. SnakeCase will always be valid, meaning you will never have the problem of trailing spaces or empty strings.

Basic usage

let id = SnakeCase::try_from_str("hello_world").unwrap();
assert_eq!(id, "hello_world");

There is also SnakeCaseRef which is a non-owning reference to a snake_case string.


If you enable the "serde" feature then SnakeCase will implement Serialize and Deserialize.

Deserialize will fail if a string is not valid snake case.