Skip to main content

aiway_plugin/
wasm_types.rs

1//! WASM 插件边界序列化类型
2//!
3//! 定义 Host(网关)与 WASM 插件之间数据交换的格式。
4//! 使用 bincode 序列化,性能优于 JSON。
5
6use serde::{Deserialize, Serialize};
7use std::sync::Arc;
8
9/// 插件钩子 ID
10pub const HOOK_ON_REQUEST: i32 = 1;
11pub const HOOK_ON_REQUEST_BODY: i32 = 2;
12pub const HOOK_ON_RESPONSE: i32 = 3;
13pub const HOOK_ON_RESPONSE_BODY: i32 = 4;
14pub const HOOK_ON_LOGGING: i32 = 5;
15
16/// 传递给 WASM 插件的输入数据
17#[derive(Serialize, Deserialize)]
18pub struct WasmInput {
19    /// 插件配置(JSON 字符串)
20    pub config: Arc<str>,
21    /// Body 数据
22    pub body: Option<Vec<u8>>,
23    /// 请求 ID(仅 logging 阶段使用)
24    pub request_id: Option<String>,
25    /// 请求时间戳(仅 logging 阶段使用)
26    pub request_ts: Option<i64>,
27}
28
29/// WASM 插件返回的输出数据
30#[derive(Serialize, Deserialize)]
31pub struct WasmOutput {
32    /// 修改后的 Body(None 表示不修改)
33    pub body: Option<Vec<u8>>,
34    /// 插件主动响应(Some 时网关应终止后续流程并返回此响应)
35    /// 目前近 `on_request` 和 `on_response` 阶段有效
36    pub respond: Option<WasmRespond>,
37}
38
39/// 插件主动响应数据
40#[derive(Serialize, Deserialize)]
41pub struct WasmRespond {
42    /// HTTP 状态码
43    pub status: u16,
44    /// 响应头
45    pub headers: Vec<(String, String)>,
46    /// 响应体
47    pub body: Vec<u8>,
48}
49
50/// WASM 插件元信息(由 plugin_info 导出返回)
51#[derive(Serialize, Deserialize)]
52pub struct WasmPluginInfo {
53    /// 插件名称
54    pub name: String,
55    /// 插件版本
56    pub version: String,
57    /// 插件描述
58    pub description: String,
59    /// 默认配置(JSON 字符串)
60    pub default_config: String,
61    /// 插件文档
62    pub readme: Option<String>,
63}