slugrs 0.3.2

A fast, locale-aware slugify library for Rust
Documentation
#![forbid(unsafe_code)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![cfg_attr(docsrs, doc = include_str!("../README.md"))]

mod locale;
mod options;
mod slug;

pub use crate::locale::Locale;
pub use crate::options::Options;
pub use crate::slug::{slugify_with_options, Slugifier};

/// Slugify with default options.
pub fn slugify(input: &str) -> String {
    slugify_with_options(input, &Options::default())
}

#[cfg(test)]
mod tests {
    use super::*;
    use regex::Regex;

    #[test]
    fn basic_english() {
        assert_eq!(slugify("Hello, World!"), "hello-world");
        assert_eq!(
            slugify("  Multiple   spaces\tand\nlines  "),
            "multiple-spaces-and-lines"
        );
    }

    #[test]
    fn custom_separator() {
        let opts = Options::default().separator("_");
        assert_eq!(slugify_with_options("A B C", &opts), "a_b_c");
    }

    #[test]
    fn german_locale() {
        let opts = Options::default().locale(Some(Locale::De));
        assert_eq!(
            slugify_with_options("Füße lösen Ärger", &opts),
            "fuesse-loesen-aerger"
        );
    }

    #[test]
    fn turkish_locale() {
        let opts = Options::default().locale(Some(Locale::Tr));
        assert_eq!(
            slugify_with_options("İstanbul'a hoş geldiniz!", &opts),
            "istanbula-hos-geldiniz"
        );
    }

    #[test]
    fn remove_pattern() {
        let opts = Options::default().remove(Some(Regex::new("[']").unwrap()));
        assert_eq!(slugify_with_options("rock 'n' roll", &opts), "rock-n-roll");
    }

    #[test]
    fn fluent_builder_usage() {
        use crate::slug::Slugifier;
        use regex::Regex;

        let s = Slugifier::new()
            .separator("_")
            .locale(Some(Locale::Tr))
            .remove(Some(Regex::new("[0-9]").unwrap()))
            .lowercase(true)
            .trim(true);

        assert_eq!(
            s.slugify("İstanbul'a 123 hoş geldiniz!"),
            "istanbula_hos_geldiniz"
        );
    }
}