#cache #string #servo #interning

string_cache

A string interning library for Rust, developed as part of the Servo project

61 releases

✓ Uses Rust 2018 edition

0.8.0 Oct 18, 2019
0.7.4 Sep 30, 2019
0.7.3 Jun 5, 2018
0.7.1 Dec 4, 2017
0.1.10 Jul 30, 2015
Download history 10705/week @ 2019-07-15 11715/week @ 2019-07-22 11791/week @ 2019-07-29 11816/week @ 2019-08-05 13134/week @ 2019-08-12 13319/week @ 2019-08-19 12812/week @ 2019-08-26 12148/week @ 2019-09-02 12181/week @ 2019-09-09 15348/week @ 2019-09-16 14102/week @ 2019-09-23 15057/week @ 2019-09-30 16357/week @ 2019-10-07 17880/week @ 2019-10-14 16766/week @ 2019-10-21

60,054 downloads per month
Used in 289 crates (23 directly)

MIT/Apache

29KB
464 lines

string-cache

Build Status

Documentation

A string interning library for Rust, developed as part of the Servo project.

Simple usage

In Cargo.toml:

[dependencies]
string_cache = "0.8"

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.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

~255–365KB