| Crates.io | illuminate-string |
| lib.rs | illuminate-string |
| version | 0.2.0 |
| created_at | 2025-09-21 08:30:45.389166+00 |
| updated_at | 2025-09-21 08:40:11.231252+00 |
| description | A comprehensive Rust library for advanced string manipulation and processing. |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1848609 |
| size | 100,454 |
A comprehensive Rust library for string manipulation, inspired by Laravel's Str helper class. This library provides a fluent, intuitive API for common string operations with full Unicode support.
Add this to your Cargo.toml:
[dependencies]
illuminate-string = "0.1.0"
use illuminate_string::Str;
fn main() {
// Case conversion
assert_eq!(Str::camel("foo_bar"), "fooBar");
assert_eq!(Str::snake("fooBar", "_"), "foo_bar");
assert_eq!(Str::kebab("fooBar"), "foo-bar");
assert_eq!(Str::studly("foo_bar"), "FooBar");
// String analysis
assert!(Str::contains("Hello World", &["World"], false));
assert!(Str::starts_with("Hello World", &["Hello"]));
assert!(Str::ends_with("Hello World", &["World"]));
// Text manipulation
assert_eq!(Str::limit("The quick brown fox", 10, "...", false), "The quick ...");
assert_eq!(Str::reverse("Hello"), "olleH");
assert_eq!(Str::ucfirst("hello world"), "Hello world");
// Pluralization
assert_eq!(Str::plural("car", 2, false), "cars");
assert_eq!(Str::singular("cars"), "car");
// UUID generation
let uuid = Str::uuid();
println!("Generated UUID: {}", uuid);
}
| Method | Description | Example |
|---|---|---|
camel(value) |
Convert to camelCase | foo_bar → fooBar |
snake(value, delimiter) |
Convert to snake_case | fooBar → foo_bar |
kebab(value) |
Convert to kebab-case | fooBar → foo-bar |
studly(value) |
Convert to StudlyCase/PascalCase | foo_bar → FooBar |
title(value) |
Convert to Title Case | hello world → Hello World |
upper(value) |
Convert to UPPERCASE | hello → HELLO |
lower(value) |
Convert to lowercase | HELLO → hello |
| Method | Description | Example |
|---|---|---|
contains(haystack, needles, ignore_case) |
Check if string contains any of the needles | |
contains_all(haystack, needles, ignore_case) |
Check if string contains all needles | |
starts_with(haystack, needles) |
Check if string starts with any needle | |
ends_with(haystack, needles) |
Check if string ends with any needle | |
is_ascii(value) |
Check if string is 7-bit ASCII | |
is_json(value) |
Check if string is valid JSON | |
is_url(value, protocols) |
Check if string is valid URL | |
is_uuid(value, version) |
Check if string is valid UUID | |
is_ulid(value) |
Check if string is valid ULID |
| Method | Description | Example |
|---|---|---|
limit(value, limit, end, preserve_words) |
Limit string length | |
words(value, words, end) |
Limit number of words | |
trim(value) |
Remove whitespace from both ends | |
ltrim(value, charlist) |
Remove whitespace from start | |
rtrim(value, charlist) |
Remove whitespace from end | |
pad_left(value, length, pad) |
Pad string on the left | |
pad_right(value, length, pad) |
Pad string on the right | |
pad_both(value, length, pad) |
Pad string on both sides |
| Method | Description | Example |
|---|---|---|
after(subject, search) |
Get string after first occurrence | |
after_last(subject, search) |
Get string after last occurrence | |
before(subject, search) |
Get string before first occurrence | |
before_last(subject, search) |
Get string before last occurrence | |
between(subject, from, to) |
Get string between two values | |
replace(search, replace, subject, case_sensitive) |
Replace occurrences | |
replace_first(search, replace, subject) |
Replace first occurrence | |
replace_last(search, replace, subject) |
Replace last occurrence | |
remove(search, subject, case_sensitive) |
Remove occurrences |
use string_rs::{Str, MarkdownOptions};
let options = MarkdownOptions::default();
let html = Str::markdown("# Hello\nThis is **bold**", options);
let masked = Str::mask("taylor@example.com", '*', 3, Some(10));
// Result: "tay**********e.com"
// Generate UUID v4
let uuid = Str::uuid();
// Generate ULID
let ulid = Str::ulid(None);
// Custom factories for testing
Str::create_uuids_using(|| uuid::Uuid::nil());
// Basic pluralization
assert_eq!(Str::plural("car", 2, false), "cars");
assert_eq!(Str::plural("child", 2, false), "children");
// With count
assert_eq!(Str::plural("car", 2, true), "2 cars");
// Singularization
assert_eq!(Str::singular("cars"), "car");
assert_eq!(Str::singular("children"), "child");
let encoded = Str::to_base64("Hello World");
let decoded = Str::from_base64(&encoded, false).unwrap();
use string_rs::ExcerptOptions;
let options = ExcerptOptions {
radius: 100,
omission: "...".to_string(),
};
use string_rs::MarkdownOptions;
let options = MarkdownOptions {
tables: true,
footnotes: true,
strikethrough: true,
tasklists: true,
};
Run the test suite:
cargo test
All 47 tests cover the core functionality and edge cases.
regex - Regular expression supportunicode-segmentation - Unicode-aware string segmentationunidecode - ASCII transliterationbase64 - Base64 encoding/decodinguuid - UUID generationulid - ULID generationrand - Random number generationonce_cell - Thread-safe static initializationserde_json - JSON validationurl - URL validationchrono - Date/time handlingpulldown-cmark - Markdown processingtextwrap - Text wrappingThe library uses caching for expensive operations like case conversions to improve performance in repeated operations. Caches can be cleared using:
Str::flush_cache();
Full Unicode support is provided through the unicode-segmentation crate, ensuring proper handling of:
This project is licensed under the MIT License - see the LICENSE file for details.