use crate::{
config::SpatialConfig,
core::SpatialProcessor,
types::{Position3D, SpatialEffect, SpatialRequest, SpatialResult},
AudioQualitySettings, Error, Result,
};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use tracing::{debug, info, warn};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PublicSpaceType {
Museum {
ceiling_height: f32,
hard_surface_ratio: f32,
},
Airport {
dimensions: (f32, f32, f32),
background_noise_db: f32,
},
Stadium {
capacity: u32,
covered: bool,
},
ShoppingCenter {
floors: u8,
has_atrium: bool,
},
OutdoorPark {
area_sqm: f32,
natural_barriers: bool,
},
TransitHub {
platform_type: PlatformType,
daily_passengers: u32,
},
ConventionCenter {
hall_dimensions: (f32, f32, f32),
modular: bool,
},
ReligiousVenue {
acoustic_style: AcousticStyle,
capacity: u32,
},
Custom {
dimensions: (f32, f32, f32),
acoustic_properties: CustomAcousticProperties,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PlatformType {
Underground,
Elevated,
GroundLevel,
Mixed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AcousticStyle {
Gothic,
Modern,
Classical,
Contemporary,
Traditional(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CustomAcousticProperties {
pub reverb_time: f32,
pub absorption: f32,
pub diffusion: f32,
pub background_noise: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublicSpaceConfig {
pub space_type: PublicSpaceType,
pub installation: InstallationConfig,
pub zone_management: ZoneManagementConfig,
pub crowd_management: CrowdManagementConfig,
pub environmental_adaptation: EnvironmentalAdaptationConfig,
pub safety_compliance: SafetyComplianceConfig,
pub content_delivery: ContentDeliveryConfig,
pub accessibility: AccessibilityConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InstallationConfig {
pub placement_strategy: PlacementStrategy,
pub max_coverage_area: f32,
pub speaker_arrays: Vec<SpeakerArray>,
pub processing_architecture: ProcessingArchitecture,
pub network_config: NetworkInfrastructure,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PlacementStrategy {
UniformGrid {
spacing: f32,
height: f32,
},
ZoneBased {
zones: Vec<ZoneConfiguration>,
},
PathFollowing {
path_segments: Vec<PathSegment>,
spacing: f32,
},
Perimeter {
perimeter_points: Vec<Position3D>,
inward_facing: bool,
},
CeilingDistributed {
ceiling_height: f32,
coverage_pattern: CoveragePattern,
},
Custom {
speaker_positions: Vec<Position3D>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ZoneConfiguration {
pub zone_id: String,
pub boundary: ZoneBoundary,
pub audio_config: ZoneAudioConfig,
pub priority: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ZoneBoundary {
Rectangle {
corners: [Position3D; 4],
},
Circle {
center: Position3D,
radius: f32,
},
Polygon {
vertices: Vec<Position3D>,
},
Path {
centerline: Vec<Position3D>,
width: f32,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ZoneAudioConfig {
pub content_type: ContentType,
pub volume_level: f32,
pub language: LanguageConfig,
pub quality_settings: AudioQualitySettings,
pub directional_settings: DirectionalAudioSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ContentType {
Announcements {
priority: AnnouncementPriority,
},
Ambient {
style: AmbientStyle,
},
GuidedTour {
language: String,
segment_id: String,
},
Wayfinding {
destination: String,
direction_type: DirectionType,
},
Entertainment {
category: String,
age_rating: AgeRating,
},
Educational {
subject: String,
level: EducationLevel,
},
Safety {
emergency_type: EmergencyType,
urgency: UrgencyLevel,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PathSegment {
pub start: Position3D,
pub end: Position3D,
pub width: f32,
pub elevation_profile: ElevationProfile,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ElevationProfile {
Flat,
Sloped {
gradient: f32,
},
Stepped {
step_count: u32,
},
Variable {
elevation_points: Vec<(f32, f32)>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CoveragePattern {
SquareGrid,
Triangular,
Random,
Focused {
focus_areas: Vec<Position3D>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpeakerArray {
pub array_id: String,
pub position: Position3D,
pub array_type: ArrayType,
pub coverage_area: CoverageArea,
pub power_config: PowerConfiguration,
pub weather_protection: WeatherProtection,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ArrayType {
LineArray {
elements: u8,
spacing: f32,
steerable: bool,
},
PointSource {
speakers: Vec<PointSpeaker>,
},
Distributed {
speaker_positions: Vec<Position3D>,
sync_network: SyncNetwork,
},
SubwooferArray {
count: u8,
cardioid: bool,
},
CeilingArray {
pattern: CeilingPattern,
beam_width: f32,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PointSpeaker {
pub relative_position: Position3D,
pub frequency_range: (f32, f32),
pub power_watts: f32,
pub directivity: DirectivityPattern,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DirectivityPattern {
Omnidirectional,
Cardioid {
angle: f32,
},
Supercardioid {
angle: f32,
},
Bidirectional,
Custom {
pattern: Vec<(f32, f32)>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CoverageArea {
pub primary_area: ZoneBoundary,
pub secondary_area: Option<ZoneBoundary>,
pub quality_target: f32,
pub max_spl_db: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PowerConfiguration {
pub total_power_watts: f32,
pub power_supply: PowerSupplyType,
pub backup_power: bool,
pub efficiency_rating: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PowerSupplyType {
ACMains {
voltage: f32,
frequency: f32,
},
PoE {
poe_standard: PoEStandard,
},
DC {
voltage: f32,
},
Solar {
panel_watts: f32,
battery_ah: f32,
},
Hybrid {
primary: Box<PowerSupplyType>,
backup: Box<PowerSupplyType>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PoEStandard {
Standard,
Plus,
PlusPlus,
UltraHighPower,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WeatherProtection {
pub ip_rating: String,
pub temperature_range: (f32, f32),
pub wind_resistance: WindResistance,
pub uv_protection: bool,
pub corrosion_protection: CorrosionProtection,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum WindResistance {
Low,
Moderate,
High,
Hurricane,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CorrosionProtection {
Basic,
Marine,
Industrial,
StainlessSteel,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ProcessingArchitecture {
Centralized {
processor_location: Position3D,
latency_compensation: bool,
},
Distributed {
processing_nodes: Vec<ProcessingNode>,
load_balancing: LoadBalancingStrategy,
},
Hybrid {
central_coordinator: Position3D,
edge_processors: Vec<ProcessingNode>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessingNode {
pub node_id: String,
pub location: Position3D,
pub capabilities: ProcessingCapabilities,
pub network_config: NodeNetworkConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessingCapabilities {
pub max_streams: u32,
pub latency_ms: f32,
pub supported_formats: Vec<AudioFormat>,
pub dsp_features: Vec<DSPFeature>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AudioFormat {
PCM {
sample_rate: u32,
bit_depth: u16,
channels: u8,
},
Compressed {
codec: AudioCodec,
bitrate: u32,
},
Spatial {
format: SpatialAudioFormat,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AudioCodec {
AAC,
Opus,
FLAC,
MP3,
Vorbis,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SpatialAudioFormat {
Binaural,
Ambisonics {
order: u8,
},
ObjectBased,
WFS,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DSPFeature {
Compression,
ParametricEQ,
Reverb,
DelayCompensation,
NoiseReduction,
Beamforming,
SpatialUpscaling,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum LoadBalancingStrategy {
RoundRobin,
LeastLoaded,
Geographic,
ContentAware,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkInfrastructure {
pub topology: NetworkTopology,
pub bandwidth_requirements: BandwidthRequirements,
pub qos_settings: QoSSettings,
pub redundancy: NetworkRedundancy,
pub security: NetworkSecurity,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum NetworkTopology {
Star {
central_switch: Position3D,
},
Mesh {
nodes: Vec<MeshNode>,
},
Ring {
ring_nodes: Vec<Position3D>,
},
Tree {
root: TreeNode,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MeshNode {
pub position: Position3D,
pub neighbors: Vec<String>,
pub capabilities: NodeCapabilities,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TreeNode {
pub node_id: String,
pub position: Position3D,
pub children: Vec<TreeNode>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeCapabilities {
pub max_connections: u8,
pub can_forward: bool,
pub can_process: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BandwidthRequirements {
pub per_stream_mbps: f32,
pub control_traffic_mbps: f32,
pub peak_requirement_mbps: f32,
pub burst_capacity_mbps: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QoSSettings {
pub audio_priority: u8,
pub control_priority: u8,
pub max_latency_ms: f32,
pub jitter_tolerance_ms: f32,
pub packet_loss_tolerance: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkRedundancy {
pub redundant_paths: bool,
pub auto_failover: bool,
pub failover_time_ms: f32,
pub backup_network: Option<BackupNetworkType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum BackupNetworkType {
Cellular,
Satellite,
WirelessMesh,
SecondaryWired,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkSecurity {
pub encryption_enabled: bool,
pub authentication_required: bool,
pub vpn_config: Option<VPNConfig>,
pub firewall_rules: Vec<FirewallRule>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VPNConfig {
pub vpn_type: VPNType,
pub server_address: String,
pub auth_method: AuthMethod,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum VPNType {
OpenVPN,
IPSec,
WireGuard,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AuthMethod {
Certificate,
PreSharedKey,
UserPass,
MFA,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FirewallRule {
pub name: String,
pub source: String,
pub destination: String,
pub port_range: (u16, u16),
pub protocol: NetworkProtocol,
pub action: FirewallAction,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum NetworkProtocol {
TCP,
UDP,
ICMP,
Any,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum FirewallAction {
Allow,
Deny,
LogAllow,
LogDeny,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ZoneManagementConfig {
pub zones: Vec<AudioZone>,
pub inter_zone_policies: InterZonePolicies,
pub dynamic_zones: DynamicZoneConfig,
pub priority_system: ZonePrioritySystem,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AudioZone {
pub zone_id: String,
pub zone_name: String,
pub boundary: ZoneBoundary,
pub audio_config: ZoneAudioConfig,
pub access_control: ZoneAccessControl,
pub zone_state: ZoneState,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ZoneAccessControl {
pub public_access: bool,
pub required_permissions: Vec<Permission>,
pub time_restrictions: Option<TimeRestrictions>,
pub group_restrictions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Permission {
Listen,
Contribute,
Control,
Admin,
Emergency,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimeRestrictions {
pub allowed_periods: Vec<TimePeriod>,
pub timezone: String,
pub special_schedules: Vec<SpecialSchedule>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimePeriod {
pub days_of_week: Vec<u8>,
pub start_time: String,
pub end_time: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpecialSchedule {
pub name: String,
pub date_range: (chrono::NaiveDate, chrono::NaiveDate),
pub override_periods: Vec<TimePeriod>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ZoneState {
pub activity_level: ActivityLevel,
pub active_listeners: u32,
pub current_content: Option<ContentInfo>,
pub quality_metrics: ZoneQualityMetrics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ActivityLevel {
Inactive,
Low,
Moderate,
High,
Peak,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContentInfo {
pub content_id: String,
pub title: String,
pub duration_seconds: u32,
pub position_seconds: u32,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ZoneQualityMetrics {
pub audio_quality: f32,
pub coverage_quality: f32,
pub listener_satisfaction: f32,
pub system_performance: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InterZonePolicies {
pub bleed_prevention: BleedPreventionConfig,
pub cross_zone_coordination: CrossZoneConfig,
pub conflict_resolution: ConflictResolutionConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BleedPreventionConfig {
pub enabled: bool,
pub max_bleed_db: f32,
pub adaptive_volume: bool,
pub directional_enhancement: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrossZoneConfig {
pub synchronized_delivery: bool,
pub transition_smoothing: TransitionSmoothing,
pub multi_zone_experiences: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TransitionSmoothing {
pub enabled: bool,
pub overlap_distance: f32,
pub crossfade_duration: f32,
pub volume_matching: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConflictResolutionConfig {
pub priority_based: bool,
pub time_based_arbitration: bool,
pub user_preferences: bool,
pub emergency_override: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DynamicZoneConfig {
pub enabled: bool,
pub crowd_detection: CrowdDetectionConfig,
pub adaptive_boundaries: bool,
pub temp_zone_duration: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrowdDetectionConfig {
pub detection_method: CrowdDetectionMethod,
pub min_crowd_size: u32,
pub sensitivity: f32,
pub update_frequency: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CrowdDetectionMethod {
WiFiDevices,
BluetoothBeacons,
ComputerVision,
AcousticSignature,
Manual,
SensorFusion {
methods: Vec<CrowdDetectionMethod>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ZonePrioritySystem {
pub priority_levels: u8,
pub emergency_override: bool,
pub time_sensitive_boost: bool,
pub vip_priorities: HashMap<String, u8>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrowdManagementConfig {
pub density_monitoring: CrowdDensityMonitoring,
pub flow_management: CrowdFlowManagement,
pub safety_systems: CrowdSafetyConfig,
pub information_systems: CrowdInformationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrowdDensityMonitoring {
pub real_time_tracking: bool,
pub density_thresholds: DensityThresholds,
pub prediction_enabled: bool,
pub heat_maps: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DensityThresholds {
pub low_density: f32,
pub moderate_density: f32,
pub high_density: f32,
pub critical_density: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrowdFlowManagement {
pub direction_management: bool,
pub queue_management: QueueManagementConfig,
pub pathway_optimization: bool,
pub real_time_adjustments: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueueManagementConfig {
pub virtual_queues: bool,
pub status_announcements: bool,
pub wait_time_estimates: bool,
pub overflow_handling: OverflowHandling,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum OverflowHandling {
Redirect {
alternative_areas: Vec<String>,
},
TimedEntry {
slot_duration_minutes: u32,
},
CapacityWarnings,
DynamicPricing,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrowdSafetyConfig {
pub evacuation_systems: EvacuationConfig,
pub medical_response: MedicalResponseConfig,
pub incident_detection: IncidentDetectionConfig,
pub communication_systems: EmergencyCommunicationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EvacuationConfig {
pub route_planning: bool,
pub dynamic_routes: bool,
pub multilingual: bool,
pub audio_visual_guidance: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MedicalResponseConfig {
pub auto_emergency_call: bool,
pub personnel_notification: bool,
pub first_aid_guidance: bool,
pub equipment_location: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IncidentDetectionConfig {
pub auto_detection: bool,
pub detection_methods: Vec<IncidentDetectionMethod>,
pub response_time_targets: ResponseTimeTargets,
pub escalation_procedures: EscalationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum IncidentDetectionMethod {
AudioSignature,
VideoAnalytics,
CrowdBehavior,
EnvironmentalSensors,
ManualReporting,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResponseTimeTargets {
pub detection_to_alert: u32,
pub alert_to_response: u32,
pub full_response: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EscalationConfig {
pub levels: Vec<EscalationLevel>,
pub auto_escalation: bool,
pub timeouts: HashMap<String, u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EscalationLevel {
pub level_name: String,
pub response_time: u32,
pub notify_personnel: Vec<String>,
pub actions: Vec<EscalationAction>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EscalationAction {
Notify {
contacts: Vec<String>,
},
TriggerAlarms,
LockDown {
areas: Vec<String>,
},
Evacuate {
areas: Vec<String>,
},
CallEmergencyServices,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmergencyCommunicationConfig {
pub public_address: bool,
pub mobile_alerts: MobileAlertConfig,
pub digital_signage: bool,
pub radio_comms: RadioCommConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MobileAlertConfig {
pub sms_alerts: bool,
pub push_notifications: bool,
pub location_targeting: bool,
pub multi_language: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RadioCommConfig {
pub emergency_frequency: f32,
pub backup_frequencies: Vec<f32>,
pub encryption: bool,
pub interop_protocols: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CrowdInformationConfig {
pub real_time_info: bool,
pub personalized_info: PersonalizedInfoConfig,
pub wayfinding: WayfindingConfig,
pub event_info: EventInfoConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PersonalizedInfoConfig {
pub preference_tracking: bool,
pub language_preferences: bool,
pub accessibility_needs: bool,
pub interest_based: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WayfindingConfig {
pub audio_directions: bool,
pub landmark_based: bool,
pub route_optimization: bool,
pub accessibility_routes: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventInfoConfig {
pub schedule_updates: bool,
pub location_changes: bool,
pub capacity_updates: bool,
pub special_announcements: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnvironmentalAdaptationConfig {
pub temperature_compensation: bool,
pub humidity_adjustment: bool,
pub wind_noise_cancellation: bool,
pub adaptive_gain: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SafetyComplianceConfig {
pub emergency_override: bool,
pub ada_compliance: bool,
pub max_volume_db: f32,
pub quiet_zones: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContentDeliveryConfig {
pub multi_language: bool,
pub content_scheduling: bool,
pub personalized_delivery: bool,
pub realtime_updates: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccessibilityConfig {
pub hearing_aid_compatible: bool,
pub visual_indicators: bool,
pub simplified_interfaces: bool,
pub high_contrast_cues: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LanguageConfig {
pub primary_language: String,
pub supported_languages: Vec<String>,
pub auto_detection: bool,
pub fallback_language: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DirectionalAudioSettings {
pub beam_forming: bool,
pub focus_angle: f32,
pub directional_strength: f32,
pub auto_tracking: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AnnouncementPriority {
Low,
Normal,
High,
Emergency,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AmbientStyle {
Natural,
Classical,
Modern,
Themed(String),
Silent,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DirectionType {
Front,
Back,
Left,
Right,
Above,
Below,
Custom(f32, f32, f32),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AgeRating {
AllAges,
Teen,
Adult,
Senior,
Child,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EducationLevel {
Elementary,
MiddleSchool,
HighSchool,
College,
Graduate,
General,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EmergencyType {
Fire,
Medical,
Security,
Weather,
Evacuation,
General,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum UrgencyLevel {
Low,
Medium,
High,
Critical,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SyncNetwork {
pub protocol: String,
pub sync_accuracy_ms: u32,
pub nodes: Vec<String>,
pub redundancy: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CeilingPattern {
Grid {
spacing: f32,
},
Linear {
direction: f32,
},
Circular {
radius: f32,
},
Custom {
points: Vec<Position3D>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeNetworkConfig {
pub topology: NetworkTopology,
pub node_capacity: u32,
pub failover: FailoverConfig,
pub load_balancing: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FailoverConfig {
pub auto_failover: bool,
pub backup_nodes: Vec<String>,
pub recovery_time_sec: u32,
}