ordinary-api 0.6.0-pre.13

API server for Ordinary
Documentation
#![cfg_attr(docsrs, feature(doc_cfg))]
#![doc = include_str!("../README.md")]
#![warn(clippy::all, clippy::pedantic)]
#![allow(
    clippy::needless_for_each,
    clippy::missing_errors_doc,
    clippy::cast_precision_loss,
    clippy::match_wildcard_for_single_variants,
    clippy::similar_names
)]

// Copyright (C) 2026 Ordinary Labs, LLC.
//
// SPDX-License-Identifier: AGPL-3.0-only

use serde::{Deserialize, Serialize};
use utoipa::ToSchema;

/// Client components for facilitating interaction with [`OrdinaryApiServer`]
#[cfg(feature = "client")]
pub mod client;

/// Server components for setting up an [`OrdinaryApiServer`]
#[cfg(feature = "server")]
pub mod server;

fn permissions_field(idx: u8) -> ordinary_types::Field {
    ordinary_types::Field {
        idx,
        name: "permissions".into(),
        kind: ordinary_types::Kind::List {
            kind: Box::new(ordinary_types::Kind::Enum {
                name: "permissions".into(),
                opts: vec![
                    ordinary_types::EnumOpt {
                        idx: 0,
                        name: "admin".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 1,
                        name: "read".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 2,
                        name: "write".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 3,
                        name: "update".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 4,
                        name: "upload".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 5,
                        name: "install".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 6,
                        name: "deploy".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 7,
                        name: "bridge".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 8,
                        name: "kill".into(),
                    },
                    ordinary_types::EnumOpt {
                        idx: 9,
                        name: "erase".into(),
                    },
                ],
            }),
        },
        ..Default::default()
    }
}

#[must_use]
pub fn api_invite_claims() -> Vec<ordinary_types::Field> {
    vec![
        ordinary_types::Field {
            idx: 1,
            name: "account".into(),
            kind: ordinary_types::Kind::String,
            ..Default::default()
        },
        ordinary_types::Field {
            idx: 2,
            name: "domain".into(),
            kind: ordinary_types::Kind::String,
            ..Default::default()
        },
        permissions_field(3),
    ]
}

#[must_use]
pub fn api_account_claims() -> Vec<ordinary_types::Field> {
    vec![
        ordinary_types::Field {
            idx: 1,
            name: "domain".into(),
            kind: ordinary_types::Kind::String,
            ..Default::default()
        },
        permissions_field(2),
    ]
}

#[derive(Serialize, Deserialize, ToSchema)]
pub struct ApiInfo {
    pub system_cpu_count: usize,
    pub system_cpu_usage: String,

    pub system_memory_total: String,
    pub system_memory_used: String,
    pub system_memory_free: String,
    pub system_memory_available: String,

    pub process_cpu_usage: String,
    pub process_cpu_time: String,

    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(default)]
    pub process_threads: Option<usize>,

    pub process_memory_real: String,
    pub process_memory_virtual: String,

    pub process_disk_read: String,
    pub process_disk_write: String,
}