3 个版本
0.1.2 | 2021年4月23日 |
---|---|
0.1.1 | 2021年4月23日 |
0.1.0 | 2021年4月23日 |
#10 in #repetition
18KB
382 行
Genesys
一个简单的文本格式,用于声明基本组件,并在构建时将它们转换为 Rust 数据类型。
不再需要重复宏调用或大量声明简单的结构,只需一个美好的组件列表,以及简单控制 crate/module/函数的使用和为所有模块或特定结构体的 derive。
由 pest 支持
待办事项
- 在模块中使用 crates/mods
- 为模块自定义 derive
- 为元组结构体实现 Default
- 生成枚举
- 识别单个元组结构体的原始类型以生成相关的 ops 代码
用法
build.rs
use std::env;
use std::path::PathBuf;
fn main() {
println!("cargo:rerun-if-changed=src/components");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
genesys::generate("src/components", out_path.join("components.rs")).unwrap();
}
main.rs/lib.rs
将此添加到文件的开头
include!(concat!(env!("OUT_DIR"), "/components.rs"));
速查表,genesys 格式
# Default use, applied to all modules
global_use {
# Comma-separated modules/functions
bevy::prelude::Entity,
bevy::prelude::*
}
# Default derive, applied to all components
global_derive (Debug, Entity)
# Components are either empty structs, tuple structs or named structs (enum comming soon)
# One component declaration per line
MyComponent
MyTupleComponent str # str gets translated to String
MyNamedComponent name: String, weight: f32
# Modules are declared with the modulus symbol "%"
%object {
# Local use(overrides global use)
use {
entities::MySpecialEntity
}
# Local derive(overrides global)
derive (MySpecialEntity)
Name str
Weight f32
%item {
Item
Food
TradeGood
Weapon
Armor
}
}
二进制文件
cargo run -- example/components # Prints components as rust
cargo run -- example/components components.rs # Writes output to components.rs
依赖项
~2.2–3MB
~59K SLoC