aiway_plugin/wasm_types.rs
1//! WASM 插件边界序列化类型
2//!
3//! 定义 Host(网关)与 WASM 插件之间数据交换的格式。
4//!
5//! 插件输入(config/body)与输出(主动响应)均通过宿主函数从 HttpContext
6//! 上下文存取,边界上不再传递数据结构体,仅保留插件元信息结构。
7//!
8//! # `aiway_call` 返回协议
9//!
10//! `aiway_call(hook_id) -> i64`,返回值编码:
11//! - 高 32 位:状态标记(`0` = 成功,非 `0` = 错误)
12//! - 低 32 位:成功时为控制流([`HookControl`]);错误时为错误信息长度(字符串写入固定地址 [`ERROR_BUF_PTR`])
13
14use serde::{Deserialize, Serialize};
15
16/// 插件钩子 ID
17pub const HOOK_ON_REQUEST: i32 = 1;
18pub const HOOK_ON_REQUEST_BODY: i32 = 2;
19pub const HOOK_ON_RESPONSE: i32 = 3;
20pub const HOOK_ON_RESPONSE_BODY: i32 = 4;
21pub const HOOK_ON_LOGGING: i32 = 5;
22
23/// 插件钩子执行控制流
24#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25#[repr(i32)]
26pub enum HookControl {
27 /// 继续执行后续插件/流程
28 Continue = 0,
29 /// 主动响应(数据已通过 `host_respond` 写入上下文)
30 Respond = 1,
31}
32
33/// 插件错误信息在 WASM 线性内存中的固定写入地址
34///
35/// `aiway_call` 错误时,错误信息写入该地址,低 32 位为长度。
36pub const ERROR_BUF_PTR: u32 = 1;
37
38/// WASM 插件元信息(由 plugin_info 导出返回)
39#[derive(Serialize, Deserialize)]
40pub struct WasmPluginInfo {
41 /// 插件名称
42 pub name: String,
43 /// 插件版本
44 pub version: String,
45 /// 插件描述
46 pub description: String,
47 /// 默认配置(JSON 字符串)
48 pub default_config: String,
49 /// 插件文档
50 pub readme: Option<String>,
51}