| # string-cache |
| |
| [![Build Status](https://github.com/servo/string-cache/actions/workflows/ci.yml/badge.svg)](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, |
| } |
| } |
| ``` |