Skip to main content

ppserver_def/
lib.rs

1//!
2//! # 基本类型定义
3//!
4
5pub use ppcore_def::*;
6use serde::{Deserialize, Serialize};
7
8/// ops_id 的字符长度, eg: "1234"
9pub const OPS_ID_LEN: usize = 4;
10
11/// 无法获取 uuid 时使用此默认 id
12pub const DEFAULT_REQ_ID: u64 = std::u64::MAX;
13
14/// uuid of req/resp
15pub type UUID = u64;
16
17/// - format: "<IP>:<PORT>"
18/// - eg: "192.168.3.22:9527"
19pub type ServerAddr = String;
20
21/// Client 发送的信息
22#[derive(Debug, Default, Deserialize, Serialize)]
23pub struct Req<T: Serialize> {
24    /// rpc uuid
25    pub uuid: u64,
26    /// 不指定则默认使用 IP
27    pub cli_id: Option<CliId>,
28    /// 消息正文
29    pub msg: T,
30}
31
32impl<T: Serialize> Req<T> {
33    /// create a new instance
34    pub fn new(uuid: u64, msg: T) -> Self {
35        Self::newx(uuid, None, msg)
36    }
37
38    /// create a new instance
39    pub fn newx(uuid: u64, cli_id: Option<CliId>, msg: T) -> Self {
40        Req { uuid, cli_id, msg }
41    }
42}
43
44/// 服务端的执行结果
45#[allow(missing_docs)]
46#[derive(
47    Clone, Copy, Debug, Deserialize, Serialize, Eq, PartialEq, Ord, PartialOrd,
48)]
49pub enum RetStatus {
50    Fail,
51    Success,
52}
53
54/// 返回给 Client 的信息
55#[derive(Debug, Deserialize, Serialize)]
56pub struct Resp {
57    /// rpc uuid
58    pub uuid: u64,
59    /// Fail? Success?
60    pub status: RetStatus,
61    /// 消息正文
62    pub msg: Vec<u8>,
63}
64
65#[allow(missing_docs)]
66#[derive(
67    Clone,
68    Debug,
69    Default,
70    Deserialize,
71    Serialize,
72    Eq,
73    PartialEq,
74    Ord,
75    PartialOrd,
76)]
77pub struct RespGetServerInfo {
78    pub vm_total: u32,
79    pub cpu_total: u32,
80    pub cpu_used: u32,
81    pub mem_total: u32,
82    pub mem_used: u32,
83    pub disk_total: u32,
84    pub disk_used: u32,
85    pub supported_list: Vec<String>,
86}
87
88/// 直接使用 core 模块返回的结果
89pub type RespGetEnvList = Vec<EnvMeta>;
90
91/// 公开给 Cli 使用
92#[allow(missing_docs)]
93#[derive(Debug, Default, Deserialize, Serialize)]
94pub struct ReqGetEnvInfo {
95    pub env_set: Vec<EnvId>,
96}
97
98/// 直接使用 core 模块返回的结果
99pub type RespGetEnvInfo = Vec<EnvInfo>;
100
101/// 公开给 Cli 使用
102#[allow(missing_docs)]
103#[derive(Clone, Debug, Default, Deserialize, Serialize)]
104pub struct ReqAddEnv {
105    pub env_id: EnvId,
106    pub vm_kind: Option<VmKind>,
107    pub os_prefix: Vec<String>,
108    pub life_time: Option<u64>,
109    pub cpu_num: Option<u32>,
110    pub mem_size: Option<u32>,
111    pub disk_size: Option<u32>,
112    pub port_set: Vec<Port>,
113    pub dup_each: Option<u8>,
114}
115
116/// 公开给 Cli 使用
117#[allow(missing_docs)]
118#[derive(Debug, Default, Deserialize, Serialize)]
119pub struct ReqUpdateEnvLife {
120    pub env_id: EnvId,
121    pub life_time: u64,
122    pub is_fucker: bool,
123}
124
125/// 公开给 Cli 使用
126#[allow(missing_docs)]
127#[derive(Debug, Default, Deserialize, Serialize)]
128pub struct ReqDelEnv {
129    pub env_id: EnvId,
130}
131
132/// 公开给 Cli 使用
133#[allow(missing_docs)]
134#[derive(Debug, Default, Deserialize, Serialize)]
135pub struct ReqUpdateEnvKickVm {
136    pub env_id: EnvId,
137    pub os_prefix: Vec<String>,
138}