зеркало из https://github.com/mozilla/gecko-dev.git
17a0e1807b
MozReview-Commit-ID: 2MFU90eJr47 --HG-- rename : third_party/rust/debug_unreachable/.travis.yml => third_party/rust/new_debug_unreachable/.travis.yml rename : third_party/rust/debug_unreachable/examples/simple.rs => third_party/rust/new_debug_unreachable/examples/simple.rs rename : third_party/rust/debug_unreachable/tests/check.rs => third_party/rust/new_debug_unreachable/tests/check.rs |
||
---|---|---|
.. | ||
src | ||
.cargo-checksum.json | ||
.travis.yml | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md | ||
build.rs |
README.md
string-cache
A string interning library for Rust, developed as part of the Servo project.
Simple usage
In Cargo.toml
:
[dependencies]
string_cache = "0.7"
In lib.rs
:
extern crate string_cache;
use string_cache::DefaultAtom as Atom;
With static atoms
In Cargo.toml
:
[package]
build = "build.rs"
[dependencies]
string_cache = "0.7"
[build-dependencies]
string_cache_codegen = "0.4"
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,
}
}