#string #cache #codegen #servo #interning

build string_cache_codegen

A codegen library for string-cache, developed as part of the Servo project

5 releases

0.4.2 Oct 22, 2018
0.4.1 Apr 10, 2018
0.4.0 Apr 7, 2017
0.3.1 Nov 2, 2016
0.3.0 Oct 28, 2016

#57 in Caching

Download history 8764/week @ 2019-01-23 9092/week @ 2019-01-30 11388/week @ 2019-02-06 9572/week @ 2019-02-13 10537/week @ 2019-02-20 10045/week @ 2019-02-27 9746/week @ 2019-03-06 9845/week @ 2019-03-13 9385/week @ 2019-03-20 9958/week @ 2019-03-27 11426/week @ 2019-04-03 11120/week @ 2019-04-10 9401/week @ 2019-04-17 10569/week @ 2019-04-24 10718/week @ 2019-05-01

38,855 downloads per month
Used in 201 crates (6 directly)

MIT/Apache

12KB
152 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.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,
    }
}

Dependencies

~1MB
~13K SLoC