Skip to content

String interning for Rust

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

swc-project/string-cache

This branch is 1 commit ahead of, 34 commits behind servo/string-cache:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Oct 13, 2022
db38261 · Oct 13, 2022
Feb 14, 2022
Oct 18, 2019
Aug 31, 2021
Oct 13, 2022
Mar 27, 2022
Dec 16, 2021
Apr 29, 2015
Oct 13, 2022
Jun 22, 2014
Jun 22, 2014
Oct 15, 2021

Repository files navigation

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,
    }
}

About

String interning for Rust

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 100.0%