cheetah-string 2.1.0

A lightweight, high-performance string manipulation library optimized for speed-sensitive applications
Documentation
use cheetah_string::CheetahString;
use std::env;
use std::fs;
use std::mem::{align_of, size_of};
use std::path::PathBuf;

fn target_dir() -> PathBuf {
    env::var_os("CARGO_TARGET_DIR")
        .map(PathBuf::from)
        .unwrap_or_else(|| PathBuf::from("target"))
}

fn layout_entry<T>(name: &str) -> String {
    format!(
        r#"{{"type":"{}","size":{},"align":{}}}"#,
        name,
        size_of::<T>(),
        align_of::<T>()
    )
}

#[test]
fn layout_snapshot() {
    let layouts = [
        layout_entry::<CheetahString>("CheetahString"),
        layout_entry::<Option<CheetahString>>("Option<CheetahString>"),
        layout_entry::<String>("String"),
        layout_entry::<Option<String>>("Option<String>"),
        layout_entry::<&str>("&str"),
        layout_entry::<Option<&str>>("Option<&str>"),
        layout_entry::<std::sync::Arc<str>>("Arc<str>"),
        layout_entry::<Option<std::sync::Arc<str>>>("Option<Arc<str>>"),
    ];

    let snapshot = format!(
        concat!(
            "{{\n",
            "  \"crate\":\"cheetah-string\",\n",
            "  \"profile\":\"test\",\n",
            "  \"target_arch\":\"{}\",\n",
            "  \"target_os\":\"{}\",\n",
            "  \"pointer_width\":\"{}\",\n",
            "  \"layouts\":[\n    {}\n  ]\n",
            "}}\n"
        ),
        env::consts::ARCH,
        env::consts::OS,
        std::mem::size_of::<usize>() * 8,
        layouts.join(",\n    ")
    );

    let artifact_dir = target_dir().join("layout-artifacts");
    fs::create_dir_all(&artifact_dir).expect("create layout artifact directory");
    fs::write(artifact_dir.join("layout-snapshot.json"), &snapshot)
        .expect("write layout snapshot artifact");

    println!("{snapshot}");

    assert!(size_of::<CheetahString>() >= size_of::<usize>());
    assert!(align_of::<CheetahString>() >= align_of::<usize>());
    assert!(size_of::<Option<CheetahString>>() >= size_of::<CheetahString>());
}