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
6// Copyright (C) 2026 Ordinary Labs, LLC.
7//
8// SPDX-License-Identifier: AGPL-3.0-only
9
10    clippy::needless_for_each,
11    clippy::missing_errors_doc,
12    clippy::cast_precision_loss,
13    clippy::match_wildcard_for_single_variants,
14    clippy::similar_names
15)]
16
17/// Client components for facilitating interaction with [`Admin`]
18#[cfg(feature = "client")]
19pub mod client;
20
21/// Server components for setting up an [`Admin`]
22#[cfg(feature = "server")]
23pub mod server;
24
25fn permissions_field(idx: u8) -> ordinary_types::Field {
26    ordinary_types::Field {
27        idx,
28        name: "permissions".into(),
29        kind: ordinary_types::Kind::List {
30            kind: Box::new(ordinary_types::Kind::Enum {
31                name: "permissions".into(),
32                opts: vec![
33                    ordinary_types::EnumOpt {
34                        idx: 0,
35                        name: "admin".into(),
36                    },
37                    ordinary_types::EnumOpt {
38                        idx: 1,
39                        name: "read".into(),
40                    },
41                    ordinary_types::EnumOpt {
42                        idx: 2,
43                        name: "write".into(),
44                    },
45                    ordinary_types::EnumOpt {
46                        idx: 3,
47                        name: "update".into(),
48                    },
49                    ordinary_types::EnumOpt {
50                        idx: 4,
51                        name: "upload".into(),
52                    },
53                    ordinary_types::EnumOpt {
54                        idx: 5,
55                        name: "install".into(),
56                    },
57                    ordinary_types::EnumOpt {
58                        idx: 6,
59                        name: "deploy".into(),
60                    },
61                    ordinary_types::EnumOpt {
62                        idx: 7,
63                        name: "bridge".into(),
64                    },
65                    ordinary_types::EnumOpt {
66                        idx: 8,
67                        name: "kill".into(),
68                    },
69                    ordinary_types::EnumOpt {
70                        idx: 9,
71                        name: "erase".into(),
72                    },
73                ],
74            }),
75        },
76        ..Default::default()
77    }
78}
79
80#[must_use]
81pub fn api_invite_claims() -> Vec<ordinary_types::Field> {
82    vec![
83        ordinary_types::Field {
84            idx: 1,
85            name: "account".into(),
86            kind: ordinary_types::Kind::String,
87            ..Default::default()
88        },
89        ordinary_types::Field {
90            idx: 2,
91            name: "domain".into(),
92            kind: ordinary_types::Kind::String,
93            ..Default::default()
94        },
95        permissions_field(3),
96    ]
97}
98
99#[must_use]
100pub fn api_account_claims() -> Vec<ordinary_types::Field> {
101    vec![
102        ordinary_types::Field {
103            idx: 1,
104            name: "domain".into(),
105            kind: ordinary_types::Kind::String,
106            ..Default::default()
107        },
108        permissions_field(2),
109    ]
110}