1pub mod bridge_config;
9pub mod domain_map;
10pub mod pub_sub;
11pub mod qos_policy;
12pub mod room_config;
13pub mod topic_gen;
14
15use serde::{Deserialize, Serialize};
16
17#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
21pub enum Reliability {
22 Reliable,
23 BestEffort,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
28pub enum Durability {
29 Volatile,
30 TransientLocal,
31 Persistent,
32}
33
34#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
36pub enum HistoryKind {
37 KeepLast(usize),
38 KeepAll,
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
43pub enum Ternary {
44 Neg = -1,
45 Zero = 0,
46 Pos = 1,
47}
48
49#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
53pub struct QoSPolicy {
54 pub reliability: Reliability,
55 pub durability: Durability,
56 pub history: HistoryKind,
57 pub depth: usize,
58}
59
60#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
62pub struct RoomConfig {
63 pub room_id: String,
64 pub topic: String,
65 pub domain_id: u32,
66 pub history_depth: usize,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
71pub struct Domain {
72 pub id: u32,
73 pub rooms: Vec<String>,
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
78pub struct DomainBridge {
79 pub from_domain: u32,
80 pub to_domain: u32,
81 pub rooms: Vec<String>,
82}
83
84#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
86pub struct DomainMap {
87 pub domains: Vec<Domain>,
88 pub bridges: Vec<DomainBridge>,
89}
90
91#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
93pub struct TopicDef {
94 pub name: String,
95 pub type_name: String,
96 pub key_fields: Vec<String>,
97}
98
99#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
101pub struct DDSConfig {
102 pub rooms: Vec<RoomConfig>,
103 pub domains: DomainMap,
104 pub topics: Vec<TopicDef>,
105}
106
107#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
109pub struct Room {
110 pub id: String,
111 pub name: String,
112 pub agent_count: usize,
113 pub schema: RoomSchema,
114}
115
116#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
118pub struct RoomSchema {
119 pub fields: Vec<FieldDef>,
120}
121
122#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
124pub struct FieldDef {
125 pub name: String,
126 pub type_name: String,
127 pub is_key: bool,
128}
129
130#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
132pub struct Passage {
133 pub from: String,
134 pub to: String,
135 pub ternary: Ternary,
136}
137
138#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
140pub struct Agent {
141 pub id: String,
142 pub room_id: String,
143 pub publishes: bool,
144 pub subscribes: bool,
145}
146
147#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
149pub struct PubSubAssignment {
150 pub room_id: String,
151 pub publishers: Vec<String>,
152 pub subscribers: Vec<String>,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
157pub struct Topology {
158 pub rooms: Vec<Room>,
159 pub passages: Vec<Passage>,
160 pub agents: Vec<Agent>,
161}
162
163#[cfg(test)]
164mod tests;