Skip to main content

ordinary_api/
lib.rs

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
12// Copyright (C) 2026 Ordinary Labs, LLC.
13//
14// SPDX-License-Identifier: AGPL-3.0-only
15
16use serde::{Deserialize, Serialize};
17use utoipa::ToSchema;
18
19/// Client components for facilitating interaction with [`OrdinaryApiServer`]
20#[cfg(feature = "client")]
21pub mod client;
22
23/// Server components for setting up an [`OrdinaryApiServer`]
24#[cfg(feature = "server")]
25pub mod server;
26
27fn permissions_field(idx: u8) -> ordinary_types::Field {
28    ordinary_types::Field {
29        idx,
30        name: "permissions".into(),
31        kind: ordinary_types::Kind::List {
32            kind: Box::new(ordinary_types::Kind::Enum {
33                name: "permissions".into(),
34                opts: vec![
35                    ordinary_types::EnumOpt {
36                        idx: 0,
37                        name: "admin".into(),
38                    },
39                    ordinary_types::EnumOpt {
40                        idx: 1,
41                        name: "read".into(),
42                    },
43                    ordinary_types::EnumOpt {
44                        idx: 2,
45                        name: "write".into(),
46                    },
47                    ordinary_types::EnumOpt {
48                        idx: 3,
49                        name: "update".into(),
50                    },
51                    ordinary_types::EnumOpt {
52                        idx: 4,
53                        name: "upload".into(),
54                    },
55                    ordinary_types::EnumOpt {
56                        idx: 5,
57                        name: "install".into(),
58                    },
59                    ordinary_types::EnumOpt {
60                        idx: 6,
61                        name: "deploy".into(),
62                    },
63                    ordinary_types::EnumOpt {
64                        idx: 7,
65                        name: "bridge".into(),
66                    },
67                    ordinary_types::EnumOpt {
68                        idx: 8,
69                        name: "kill".into(),
70                    },
71                    ordinary_types::EnumOpt {
72                        idx: 9,
73                        name: "erase".into(),
74                    },
75                ],
76            }),
77        },
78        ..Default::default()
79    }
80}
81
82#[must_use]
83pub fn api_invite_claims() -> Vec<ordinary_types::Field> {
84    vec![
85        ordinary_types::Field {
86            idx: 1,
87            name: "account".into(),
88            kind: ordinary_types::Kind::String,
89            ..Default::default()
90        },
91        ordinary_types::Field {
92            idx: 2,
93            name: "domain".into(),
94            kind: ordinary_types::Kind::String,
95            ..Default::default()
96        },
97        permissions_field(3),
98    ]
99}
100
101#[must_use]
102pub fn api_account_claims() -> Vec<ordinary_types::Field> {
103    vec![
104        ordinary_types::Field {
105            idx: 1,
106            name: "domain".into(),
107            kind: ordinary_types::Kind::String,
108            ..Default::default()
109        },
110        permissions_field(2),
111    ]
112}
113
114#[derive(Serialize, Deserialize, ToSchema)]
115pub struct ApiInfo {
116    pub system_cpu_count: usize,
117    pub system_cpu_usage: String,
118
119    pub system_memory_total: String,
120    pub system_memory_used: String,
121    pub system_memory_free: String,
122    pub system_memory_available: String,
123
124    pub process_cpu_usage: String,
125    pub process_cpu_time: String,
126
127    #[serde(skip_serializing_if = "Option::is_none")]
128    #[serde(default)]
129    pub process_threads: Option<usize>,
130
131    pub process_memory_real: String,
132    pub process_memory_virtual: String,
133
134    pub process_disk_read: String,
135    pub process_disk_write: String,
136}