1use crate::ast::protocol::RapidRecastProtocolType;
4use serde::{Deserialize, Serialize};
5use std::borrow::Cow;
6use std::collections::BTreeMap;
7
8#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
10pub enum RapidRecastAction<'a> {
11 AuthBasedAction(AuthBasedAction<'a>),
13 LogicBasedAction(LogicBasedAction<'a>),
15}
16
17#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
19pub enum LogicBasedAction<'a> {
20 ConditionBlock {
22 condition: ConditionStatement<'a>,
24 if_true: Box<RapidRecastAction<'a>>,
26 if_false: Option<Box<RapidRecastAction<'a>>>,
28 },
29}
30
31#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
33pub enum RecastValue<'a> {
34 Param(Cow<'a, str>),
36 String(Cow<'a, str>),
38 Number(f64),
40}
41
42#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
44pub enum ConditionStatement<'a> {
45 Equals(RecastValue<'a>, RecastValue<'a>),
47 NotEquals(RecastValue<'a>, RecastValue<'a>),
49 GreaterThan(RecastValue<'a>, RecastValue<'a>),
51 LessThan(RecastValue<'a>, RecastValue<'a>),
53 GreaterThanOrEqual(RecastValue<'a>, RecastValue<'a>),
55 LessThanOrEqual(RecastValue<'a>, RecastValue<'a>),
57 And(RecastValue<'a>, RecastValue<'a>),
59 Or(RecastValue<'a>, RecastValue<'a>),
61 Not(RecastValue<'a>),
63}
64
65#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
67pub enum AuthBasedAction<'a> {
68 CreateUser {
70 subject: UserIdentifier<'a>,
72 password: Option<Cow<'a, str>>,
74 },
75 AddMetadataToUser {
77 subject: UserIdentifier<'a>,
79 metadata: BTreeMap<Cow<'a, str>, Cow<'a, str>>,
81 },
82 GrantPermissions {
84 subject: UserIdentifier<'a>,
86 policy: Vec<RapidRecastRbacPolicy<'a>>,
88 },
89}
90
91#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
93pub struct UserIdentifier<'a> {
94 pub namespace: Cow<'a, str>,
96 pub username: Cow<'a, str>,
98}
99
100#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
102pub struct RapidRecastRbacPolicy<'a> {
103 pub subject: RapidRecastRbacSubject<'a>,
105 pub object: RapidRecastRbacObject<'a>,
107 pub action: RapidRecastRbacAction,
109}
110
111#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
113pub enum RapidRecastRbacSubject<'a> {
114 Admin,
116 Anon,
118 UserOrRole(Cow<'a, str>, Cow<'a, str>),
121}
122
123#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
125pub enum RapidRecastRbacObject<'a> {
126 Namespace(NamespaceObject<'a>),
128 Protocol(RapidRecastProtocolType),
130 Topic(TopicObject<'a>),
132 Client(ClientObject),
134 Model(ModelObject),
136}
137
138#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
140pub enum NamespaceObject<'a> {
141 ExistingNamespace(Cow<'a, str>),
143 NonExistingNamespace(Cow<'a, str>),
145}
146
147#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
149pub enum TopicObject<'a> {
150 NonExistingTopic(Cow<'a, str>),
152 NamespaceTopic(Cow<'a, str>, Cow<'a, str>),
154}
155
156#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
158pub enum ClientObject {
159 Http1,
161 Http2,
163 Http3,
165 Kafka,
167 Mqtt,
169}
170
171#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
173pub enum ModelObject {}
174
175#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
177pub enum RapidRecastRbacAction {
178 Create,
180 Read,
182 Update,
184 Delete,
186 Write,
188 List,
190 Rename,
192}