https://github.com/servo/string-cache
String interning for Rust
https://github.com/servo/string-cache
Last synced: 3 months ago
JSON representation
String interning for Rust
- Host: GitHub
- URL: https://github.com/servo/string-cache
- Owner: servo
- License: apache-2.0
- Created: 2014-06-20T09:44:33.000Z (about 11 years ago)
- Default Branch: main
- Last Pushed: 2025-03-28T03:14:42.000Z (4 months ago)
- Last Synced: 2025-04-22T03:35:18.341Z (3 months ago)
- Language: Rust
- Homepage:
- Size: 641 KB
- Stars: 199
- Watchers: 20
- Forks: 79
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# string-cache
[](https://github.com/servo/string-cache/actions)
[Documentation](https://docs.rs/string_cache/)
A string interning library for Rust, developed as part of the [Servo](https://github.com/servo/servo) project.
## Simple usage
In `Cargo.toml`:
```toml
[dependencies]
string_cache = "0.8"
```In `lib.rs`:
```rust
extern crate string_cache;
use string_cache::DefaultAtom as Atom;
```## With static atoms
In `Cargo.toml`:
```toml
[package]
build = "build.rs"[dependencies]
string_cache = "0.8"[build-dependencies]
string_cache_codegen = "0.5"
```In `build.rs`:
```rust
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`:
```rust
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:```rust
fn compute_something(input: &foo::FooAtom) -> u32 {
match *input {
foo_atom!("foo") => 1,
foo_atom!("bar") => 2,
_ => 3,
}
}
```