pub mod bridge_config;
pub mod domain_map;
pub mod pub_sub;
pub mod qos_policy;
pub mod room_config;
pub mod topic_gen;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Reliability {
Reliable,
BestEffort,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Durability {
Volatile,
TransientLocal,
Persistent,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum HistoryKind {
KeepLast(usize),
KeepAll,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum Ternary {
Neg = -1,
Zero = 0,
Pos = 1,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct QoSPolicy {
pub reliability: Reliability,
pub durability: Durability,
pub history: HistoryKind,
pub depth: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RoomConfig {
pub room_id: String,
pub topic: String,
pub domain_id: u32,
pub history_depth: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Domain {
pub id: u32,
pub rooms: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DomainBridge {
pub from_domain: u32,
pub to_domain: u32,
pub rooms: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DomainMap {
pub domains: Vec<Domain>,
pub bridges: Vec<DomainBridge>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TopicDef {
pub name: String,
pub type_name: String,
pub key_fields: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DDSConfig {
pub rooms: Vec<RoomConfig>,
pub domains: DomainMap,
pub topics: Vec<TopicDef>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Room {
pub id: String,
pub name: String,
pub agent_count: usize,
pub schema: RoomSchema,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RoomSchema {
pub fields: Vec<FieldDef>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct FieldDef {
pub name: String,
pub type_name: String,
pub is_key: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Passage {
pub from: String,
pub to: String,
pub ternary: Ternary,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Agent {
pub id: String,
pub room_id: String,
pub publishes: bool,
pub subscribes: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PubSubAssignment {
pub room_id: String,
pub publishers: Vec<String>,
pub subscribers: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Topology {
pub rooms: Vec<Room>,
pub passages: Vec<Passage>,
pub agents: Vec<Agent>,
}
#[cfg(test)]
mod tests;