26 个版本
0.18.2 | 2023年9月19日 |
---|---|
0.18.0 | 2021年10月3日 |
0.17.2 | 2020年10月25日 |
0.16.1 | 2020年7月5日 |
0.8.1 | 2018年7月1日 |
在 编程语言 中排名第 1183
每月下载量 146 次
用于 14 个 包(直接使用 5 个)
73KB
2K SLoC
各种宏,用于与 gluon
虚拟机集成。
派生宏
以下 gluon
-Traits 的自定义派生可用
可获取
为任何枚举或结构体派生 Getable
,只要所有字段也实现 Getable
(包括泛型类型参数)。如果类型在生存期内泛型,则生存期将约束为在 trait 定义中 'vm
生存期。
注意: 新类型结构体预期在 Gluon 方面是其内部类型。
示例
将此 gluon 类型
type Comment =
| Normal String
| Multiline String
| Doc String
转换为此 rust 枚举
#[macro_use]
extern crate gluon_codegen;
extern crate gluon;
enum Comment {
Normal(String),
Multiline(String),
Doc(String),
}
可推送
为任何枚举或结构体派生 Pushable
,只要所有字段也实现 Pushable
(包括泛型类型参数)。
注意: 新类型结构体按其内部类型推送。
示例
允许 User
结构体被序列化为 gluon 代码
#[macro_use]
extern crate gluon_codegen;
extern crate gluon;
#[derive(Pushable)]
struct User {
name: String,
age: u32,
}
为以下兼容的记录
type User = { name: String, age: Int }
虚拟机类型
为 rust 类型派生 VmType
,将其映射到 gluon 类型。
或者,您可以使用 #[gluon(vm_type = "<gluon_type>")]
属性指定相应的 gluon 类型,其中 gluon 类型是完全限定的类型名称。在首次使用映射的 rust 类型进行绑定之前,必须注册 gluon 类型。
如果 rust 类型有类型参数,它们也必须实现 VmType
。所有生存期都必须是 'static
。
注意: 新类型结构体映射为其内部类型。
示例
为结构体推导 VmType
#[macro_use]
extern crate gluon_codegen;
extern crate gluon;
// will map to: `{ string: String, number: Int, vec: Array Float }`
#[derive(VmType)]
struct Struct {
string: String,
number: u32,
vec: Vec<f64>,
}
映射到现有类型,假设在模块 types
中存在以下 gluon 类型
type Either l r = | Left l | Right r
需要额外的 vm_type
属性
#[macro_use]
extern crate gluon_codegen;
extern crate gluon;
#[derive(VmType)]
#[gluon(vm_type = "types.Either")]
enum Either<L, R> {
Left(L),
Right(R),
}
用户数据
为 Rust 类型推导 Userdata
以及所需的 Trace
和 VmType
。注意,您仍然需要在使用前使用 Thread::register_type
将 Rust 类型注册到 vm。
示例
为对 gluon 代码不可见的类型推导 Userdata
#[macro_use]
extern crate gluon_codegen;
extern crate gluon;
use std::sync::Arc;
// Userdata requires Trace + Debug + Send + Sync
#[derive(Userdata, Trace, Debug)]
struct Ident {
group: Arc<str>,
name: Arc<str>,
}
依赖关系
~1.5MB
~35K SLoC