Skip to main content

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}