1#![cfg_attr(docsrs, feature(doc_cfg))]
2#![doc = include_str!("../README.md")]
3#![warn(clippy::all, clippy::pedantic)]
4#![allow(
5 clippy::needless_for_each,
6 clippy::missing_errors_doc,
7 clippy::cast_precision_loss,
8 clippy::match_wildcard_for_single_variants,
9 clippy::similar_names
10)]
11
12use serde::{Deserialize, Serialize};
17use std::collections::BTreeMap;
18use utoipa::ToSchema;
19
20#[cfg(feature = "client")]
22pub mod client;
23
24#[cfg(feature = "server")]
26pub mod server;
27
28fn permissions_field(idx: u8) -> ordinary_types::Field {
29 ordinary_types::Field {
30 idx,
31 name: "permissions".into(),
32 kind: ordinary_types::Kind::List {
33 kind: Box::new(ordinary_types::Kind::Enum {
34 name: "permissions".into(),
35 opts: vec![
36 ordinary_types::EnumOpt {
37 idx: 0,
38 name: "admin".into(),
39 },
40 ordinary_types::EnumOpt {
41 idx: 1,
42 name: "read".into(),
43 },
44 ordinary_types::EnumOpt {
45 idx: 2,
46 name: "write".into(),
47 },
48 ordinary_types::EnumOpt {
49 idx: 3,
50 name: "update".into(),
51 },
52 ordinary_types::EnumOpt {
53 idx: 4,
54 name: "upload".into(),
55 },
56 ordinary_types::EnumOpt {
57 idx: 5,
58 name: "install".into(),
59 },
60 ordinary_types::EnumOpt {
61 idx: 6,
62 name: "deploy".into(),
63 },
64 ordinary_types::EnumOpt {
65 idx: 7,
66 name: "bridge".into(),
67 },
68 ordinary_types::EnumOpt {
69 idx: 8,
70 name: "kill".into(),
71 },
72 ordinary_types::EnumOpt {
73 idx: 9,
74 name: "erase".into(),
75 },
76 ],
77 }),
78 },
79 ..Default::default()
80 }
81}
82
83#[must_use]
84pub fn api_invite_claims() -> Vec<ordinary_types::Field> {
85 vec![
86 ordinary_types::Field {
87 idx: 1,
88 name: "account".into(),
89 kind: ordinary_types::Kind::String,
90 ..Default::default()
91 },
92 ordinary_types::Field {
93 idx: 2,
94 name: "domain".into(),
95 kind: ordinary_types::Kind::String,
96 ..Default::default()
97 },
98 permissions_field(3),
99 ]
100}
101
102#[must_use]
103pub fn api_account_claims() -> Vec<ordinary_types::Field> {
104 vec![
105 ordinary_types::Field {
106 idx: 1,
107 name: "domain".into(),
108 kind: ordinary_types::Kind::String,
109 ..Default::default()
110 },
111 permissions_field(2),
112 ]
113}
114
115#[derive(Serialize, Deserialize, ToSchema)]
116pub struct ApiInfo {
117 pub system_cpu_count: usize,
118 pub system_cpu_usage: String,
119
120 pub system_memory_total: String,
121 pub system_memory_used: String,
122 pub system_memory_free: String,
123 pub system_memory_available: String,
124
125 pub process_cpu_usage: String,
126 pub process_cpu_time: String,
127
128 #[serde(skip_serializing_if = "Option::is_none")]
129 #[serde(default)]
130 pub process_threads: Option<usize>,
131
132 pub process_memory_real: String,
133 pub process_memory_virtual: String,
134
135 pub process_disk_read: String,
136 pub process_disk_write: String,
137}
138
139#[derive(Serialize, Deserialize, ToSchema)]
140pub struct PortsResponse {
141 #[serde(skip_serializing_if = "Option::is_none")]
142 #[serde(default)]
143 pub app: Option<u16>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 #[serde(default)]
146 pub proxies: Option<BTreeMap<String, u16>>,
147}