#string-cache #codegen #string #atom #servo #interning #macro #part #part-of-servo #path

build string_cache_codegen

A codegen library for string-cache, developed as part of the Servo project

11 releases

0.5.4 Feb 20, 2025
0.5.2 Mar 27, 2022
0.5.1 Oct 21, 2019
0.4.2 Oct 22, 2018
0.3.1 Nov 2, 2016

#83 in Procedural macros

Download history 287713/week @ 2025-02-18 301546/week @ 2025-02-25 290741/week @ 2025-03-04 310489/week @ 2025-03-11 302266/week @ 2025-03-18 290808/week @ 2025-03-25 294520/week @ 2025-04-01 309875/week @ 2025-04-08 298226/week @ 2025-04-15 326477/week @ 2025-04-22 301255/week @ 2025-04-29 291004/week @ 2025-05-06 284900/week @ 2025-05-13 313690/week @ 2025-05-20 313947/week @ 2025-05-27 286076/week @ 2025-06-03

1,252,643 downloads per month
Used in 1,964 crates (10 directly)

MIT/Apache

14KB
199 lines

A crate to create static string caches at compiletime.

Examples

With static atoms:

In Cargo.toml:

[package]
build = "build.rs"

[dependencies]
string_cache = "0.8"

[build-dependencies]
string_cache_codegen = "0.5"

In build.rs:

extern crate string_cache_codegen;

use std::env;
use std::path::Path;

fn main() {
    string_cache_codegen::AtomType::new("foo::FooAtom", "foo_atom!")
        .atoms(&["foo", "bar"])
        .write_to_file(&Path::new(&env::var("OUT_DIR").unwrap()).join("foo_atom.rs"))
        .unwrap()
}

In lib.rs:

extern crate string_cache;

mod foo {
    include!(concat!(env!("OUT_DIR"), "/foo_atom.rs"));
}

The generated code will define a FooAtom type and a foo_atom! macro. The macro can be used in expression or patterns, with strings listed in build.rs. For example:

fn compute_something(input: &foo::FooAtom) -> u32 {
    match *input {
        foo_atom!("foo") => 1,
        foo_atom!("bar") => 2,
        _ => 3,
    }
}

Dependencies

~360–490KB