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

Download history 81/week @ 2024-03-14 68/week @ 2024-03-21 109/week @ 2024-03-28 86/week @ 2024-04-04 45/week @ 2024-04-11 85/week @ 2024-04-18 67/week @ 2024-04-25 68/week @ 2024-05-02 70/week @ 2024-05-09 63/week @ 2024-05-16 87/week @ 2024-05-23 55/week @ 2024-05-30 45/week @ 2024-06-06 37/week @ 2024-06-13 37/week @ 2024-06-20 19/week @ 2024-06-27

每月下载量 146
用于 14 包(直接使用 5 个)

MIT 许可证

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 以及所需的 TraceVmType。注意,您仍然需要在使用前使用 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