Skip to main content

aiway_protocol/gateway/
plugin.rs

1use serde::{Deserialize, Serialize};
2use std::fmt::{Display, Formatter};
3
4/// 插件配置
5///
6/// 注意:插件应无状态化
7#[derive(Debug, Serialize, Eq, PartialEq, Deserialize)]
8pub struct Plugin {
9    /// 插件名称,全局唯一
10    pub name: String,
11    /// 下载地址
12    /// - 相对地址:从控制台下载,如`/file/download/xxx.so`
13    /// - 绝对地址:从给定的地址下载,如`https://xxx.com/xxx.so`
14    pub url: String,
15    /// 插件版本,只增不减的语义化版本号。
16    pub version: String,
17}
18
19/// 已配置的插件
20///
21/// 该类型在具体的插件配置和运行时使用。
22///
23#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
24pub struct ConfiguredPlugin {
25    /// 插件名称
26    pub name: String,
27    /// 插件配置
28    pub config: serde_json::Value,
29}
30
31impl Plugin {
32    /// 通过控制台地址,构建下载地址。
33    ///
34    /// 插件地址可以是相对地址和绝对地址,如果是相对地址,则从控制台下载,否则直接下载。
35    #[inline]
36    pub fn build_url_with_console(&self, console_addr: &str) -> String {
37        format!("http://{}{}", console_addr, self.url)
38    }
39
40    /// 判断插件url是否是相对地址。
41    #[inline]
42    pub fn is_relative_download_url(&self) -> bool {
43        !self.url.starts_with("http://") && !self.url.starts_with("https://")
44    }
45}