fileslug 0.1.3

Filename-aware slug generator — slugifies file names (preserving extensions, dotfiles, version numbers) and arbitrary text
Documentation
  • Coverage
  • 100%
    11 out of 11 items documented5 out of 6 items with examples
  • Size
  • Source code size: 33.28 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 2.21 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 14s Average build duration of successful builds.
  • all releases: 13s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • vmunix/slugr
    2 0 3
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • vmunix

fileslug

Slug generator for Rust. Slugifies filenames and arbitrary text into clean, URL and shell-friendly strings.

Two entry points:

  • slugify() — filename-aware: preserves extensions, dotfiles, compound extensions (.tar.gz), and version numbers
  • slugify_string() — plain text: treats input as a raw string with no filename handling — use for URL slugs, identifiers, titles, etc.

Usage

Filenames

use fileslug::{slugify, SlugifyOptions, Style};

let opts = SlugifyOptions::default(); // kebab-case, transliterate unicode
assert_eq!(slugify("Café Résumé (Final).pdf", &opts), "cafe-resume-final.pdf");
assert_eq!(slugify(".env.local", &opts), ".env.local");
assert_eq!(slugify("archive.tar.gz", &opts), "archive.tar.gz");
assert_eq!(slugify("app-1.2.3.dmg", &opts), "app-1.2.3.dmg");

// Snake case
let snake = SlugifyOptions { style: Style::Snake, ..Default::default() };
assert_eq!(slugify("My Cool File.txt", &snake), "my_cool_file.txt");

// camelCase
let camel = SlugifyOptions { style: Style::Camel, ..Default::default() };
assert_eq!(slugify("my cool file.txt", &camel), "myCoolFile.txt");

// Keep unicode (skip transliteration)
let unicode = SlugifyOptions { keep_unicode: true, ..Default::default() };
assert_eq!(slugify("Café.txt", &unicode), "café.txt");

Arbitrary text

use fileslug::{slugify_string, SlugifyOptions};

let opts = SlugifyOptions::default();
assert_eq!(slugify_string("My Blog Post Title!", &opts), "my-blog-post-title");
assert_eq!(slugify_string("Café Résumé", &opts), "cafe-resume");

Features

  • Two modes — filename-aware (slugify) and plain text (slugify_string)
  • Extension preservation.txt, .tar.gz, .tar.bz2 etc. never modified
  • Dotfile awareness.gitignore, .env returned as-is
  • Version number preservation1.2.3 dots kept intact
  • Unicode transliteration — via any_ascii (or keep-unicode to skip)
  • Three styles — kebab-case (default), snake_case, camelCase
  • Zero-copy for dotfiles — returns Cow::Borrowed when no changes needed