rust-zw3d-macros

Crates.iorust-zw3d-macros
lib.rsrust-zw3d-macros
version0.1.0-alpha.12
created_at2025-10-12 11:54:14.985383+00
updated_at2025-12-11 03:03:56.191425+00
description为 rust-zw3d 提供的过程宏:#[cmd], #[callback]
homepagehttps://gitee.com/rust-cad/rust-zw3d
repositoryhttps://gitee.com/rust-cad/rust-zw3d
max_upload_size
id1879201
size18,615
hailoong (ytianxia6)

documentation

https://docs.rs/rust-zw3d-macros

README

rust-zw3d-macros

当前版本:Alpha(框架阶段)。API 仍可能调整,欢迎 Issue/PR(https://gitee.com/rust-cad/rust-zw3d)。

rust-zw3d 提供的过程宏。

导出的属性宏

#[cmd]

将函数注册为 ZW3D 命令。支持 (&str, i32, i32) 参数的任意子集组合,以及返回 i32() 的函数。

支持的函数签名:

  • fn() -> i32 / fn()
  • fn(i32) -> i32 / fn(i32)
  • fn(i32, i32) -> i32 / fn(i32, i32)
  • fn(&str) -> i32 / fn(&str)
  • fn(&str, i32) -> i32 / fn(&str, i32)
  • fn(&str, i32, i32) -> i32 / fn(&str, i32, i32)

宏参数形态:

  • #[cmd]:使用函数名作为命令名,默认 code
  • #[cmd("Alias")]:指定命令名
  • #[cmd(name = "Alias", code = expr)]:完整配置

#[callback]

将函数注册为 ZW3D 回调,固定签名 fn(&str, i32, i32) -> i32

宏参数形态:

  • #[callback]:使用函数名作为回调名
  • #[callback("Name")]:指定回调名

用法示例

use rust_zw3d::*;

// 不同参数组合示例
#[cmd]
fn cmd_no_params() -> i32 { 0 }

#[cmd]
fn cmd_one_i32(code: i32) -> i32 { code }

#[cmd]
fn cmd_two_i32(a: i32, b: i32) -> i32 { a + b }

#[cmd]
fn cmd_with_name(name: &str) -> i32 { 
    cvxMsgDisp(name); 
    0 
}

#[cmd]
fn cmd_full(name: &str, a: i32, b: i32) -> i32 { 
    cvxMsgDisp(&format!("{}: {} + {}", name, a, b));
    a + b 
}

// 无返回值示例
#[cmd]
fn cmd_void(code: i32) {
    cvxMsgDisp(&format!("Code: {}", code));
}

// 自定义名称和 code
#[cmd(name = "HELLO", code = 100.0)]
fn hello() {
    cvxMsgDisp("Hello ZW3D!");
}

// 回调示例
#[callback("OnEvent")]
fn on_event(name: &str, a: i32, b: i32) -> i32 { 0 }

更多示例请参考 samples/hello/src/lib.rs

实现要点

  • 基于 inventory 收集命令/回调条目,在运行时由 register_* 宏统一注册
  • cmdcallback 都会生成统一的 extern "C" 包装函数用于与 SDK 对接
  • 宏会自动分析函数签名,提取需要的参数,并处理类型转换
  • 返回 () 的函数会自动返回 0
Commit count: 0

cargo fmt