#servo #cache #string #string-cache #codegen #part #atoms

编译 string_cache_codegen

作为 Servo 项目的组成部分开发的 string-cache 的代码生成库

9 个版本

0.5.2 2022 年 3 月 27 日
0.5.1 2019 年 10 月 21 日
0.4.4 2019 年 9 月 14 日
0.4.2 2018 年 10 月 22 日
0.3.0 2016 年 10 月 28 日

#143 in 过程宏

Download history 207275/week @ 2024-03-15 218716/week @ 2024-03-22 227058/week @ 2024-03-29 190828/week @ 2024-04-05 209420/week @ 2024-04-12 193666/week @ 2024-04-19 164158/week @ 2024-04-26 158562/week @ 2024-05-03 164189/week @ 2024-05-10 178431/week @ 2024-05-17 175635/week @ 2024-05-24 186798/week @ 2024-05-31 179104/week @ 2024-06-07 183005/week @ 2024-06-14 185413/week @ 2024-06-21 119235/week @ 2024-06-28

698,258 每月下载量
用于 1,441 个 crate(8 个直接使用)

MIT/Apache

12KB
152

一个用于在编译时创建静态字符串缓存的 crate。

示例

使用静态原子

Cargo.toml

[package]
build = "build.rs"

[dependencies]
string_cache = "0.8"

[build-dependencies]
string_cache_codegen = "0.5"

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()
}

lib.rs

extern crate string_cache;

mod foo {
    include!(concat!(env!("OUT_DIR"), "/foo_atom.rs"));
}

生成的代码将定义一个 FooAtom 类型和一个 foo_atom! 宏。该宏可以在表达式或模式中使用,字符串列表在 build.rs 中列出。例如

fn compute_something(input: &foo::FooAtom) -> u32 {
    match *input {
        foo_atom!("foo") => 1,
        foo_atom!("bar") => 2,
        _ => 3,
    }
}

依赖项

~340–470KB