4 个版本
0.1.3 | 2022 年 7 月 5 日 |
---|---|
0.1.2 | 2022 年 7 月 4 日 |
0.1.1 | 2022 年 7 月 4 日 |
0.1.0 | 2022 年 7 月 4 日 |
#1996 在 Rust 模式
18KB
253 行
🥯 bagel
: 永远烘焙,永不油炸
bagel
是一个宏和其他 东西 的集合,我们在 Skytable 中经常使用,主要用于在编译时完成工作(因为我们喜欢它烤制的样子 :P)。此软件包包含我们使用的部分内容,我们很快会添加更多的“魔法”。
导入
bagel = "0.1"
贝果能做什么
def
: 使用 默认声明语法Ctor
: 继承构造函数- 支持完整的生命周期、泛型和 where 子句
#[phantom]
: 自动省略PhantomData
字段#[ctor_const]
: 将构造函数转换为const fn
Gtor
: 继承获取器- 支持完整的生命周期、泛型和 where 子句
- 高级属性:
#[gtor_const]
、#[gtor_copy]
、#[gtor_skip]
、#[phantom]
和#[gtor]
Stor
: 继承设置器- 支持完整的生命周期、泛型和 where 子句
- 使用
#[stor_skip]
或#[phantom]
跳过设置器
Constdef
: 继承常量,编译时默认实现。请参阅 此处示例
默认声明语法
默认声明语法是为你结构体(和枚举很快)实现默认值的一种替代方法。它看起来是这样的
- 使用默认特性行为
field: type
- 使用您指定的表达式
field: type = expression
以下是一个示例
use bagel::def;
def! {
#[derive(Debug)]
pub struct MyOven {
starting_temperature: u8,
increment_temp_by: u8 = 1,
oven_name: &'static str = "my_kitchen_wifi_oven1",
items_to_bake: [&'static str; 4] = [
"bagels",
"hashbrowns",
"cookies",
"pie",
],
people_buffer: Vec<String> = vec![
"one for Jamie".into(),
"another for Sophie".into()
],
}
}
let mut myoven = MyOven::default();
assert_eq!(myoven.starting_temperature, 0);
assert_eq!(myoven.oven_name, "my_kitchen_wifi_oven1");
assert_eq!(myoven.items_to_bake[3], "pie");
assert_eq!(myoven.people_buffer.len(), 2);
Constdef
示例
use bagel::Constdef;
#[derive(Constdef)]
struct Port {
requests: usize,
admin: bool,
}
#[derive(Constdef)]
struct PortLogger {
ports: [Port; 65536],
root_pid: usize,
}
const PORT_LOGGER: PortLogger = PortLogger::default();
assert_eq!(PORT_LOGGER.ports[0].requests, 0);
assert_eq!(PORT_LOGGER.ports[65535].admin, false);
许可证
dough
和 bagel
库在 Apache-2.0 许可证 下分发。
依赖项
~1.5MB
~35K SLoC