13 releases
| 0.6.1 | Sep 8, 2025 |
|---|---|
| 0.5.4 | Feb 20, 2025 |
| 0.5.2 | Mar 27, 2022 |
| 0.5.1 | Oct 21, 2019 |
| 0.3.1 | Nov 2, 2016 |
#83 in Procedural macros
1,646,707 downloads per month
Used in 2,032 crates
(10 directly)
15KB
238 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.9"
[build-dependencies]
string_cache_codegen = "0.6"
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
~180KB