#![allow(clippy::too_many_arguments)]
#![allow(dead_code)]
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DashboardConfig {
pub title: String,
pub width: u32,
pub height: u32,
pub theme: ThemeConfig,
pub layout: LayoutConfig,
pub realtime_config: RealtimeConfig,
pub interaction_config: InteractionConfig,
pub export_config: ExportConfig,
pub collaboration_config: Option<CollaborationConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThemeConfig {
pub primary_color: String,
pub secondary_color: String,
pub background_color: String,
pub text_color: String,
pub font_family: String,
pub font_size: u32,
pub border_radius: u32,
pub shadow_enabled: bool,
pub custom_variables: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LayoutConfig {
pub layout_type: LayoutType,
pub grid_config: Option<GridConfig>,
pub spacing: SpacingConfig,
pub animation: AnimationConfig,
pub breakpoints: HashMap<String, u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum LayoutType {
Fixed,
Grid,
Flexbox,
Masonry,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GridConfig {
pub columns: u32,
pub rows: u32,
pub column_gap: u32,
pub row_gap: u32,
pub auto_fit: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpacingConfig {
pub margin: u32,
pub padding: u32,
pub widget_spacing: u32,
pub container_spacing: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnimationConfig {
pub enabled: bool,
pub duration: Duration,
pub easing: String,
pub performance_mode: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeConfig {
pub enabled: bool,
pub update_interval: Duration,
pub buffer_size: usize,
pub max_connections: u32,
pub protocol: StreamingProtocol,
pub connection_timeout: Duration,
pub retry_attempts: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum StreamingProtocol {
WebSocket,
SSE,
LongPolling,
WebRTC,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InteractionConfig {
pub touch_enabled: bool,
pub keyboard_shortcuts: bool,
pub zoom_pan_enabled: bool,
pub selection_enabled: bool,
pub drag_drop_enabled: bool,
pub double_click_threshold: Duration,
pub hover_delay: Duration,
pub custom_handlers: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExportConfig {
pub formats: Vec<ExportFormat>,
pub default_format: ExportFormat,
pub quality: u32,
pub include_metadata: bool,
pub compression: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ExportFormat {
PNG,
JPEG,
SVG,
PDF,
HTML,
JSON,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CollaborationConfig {
pub enabled: bool,
pub auth: AuthConfig,
pub sharing: ShareConfig,
pub sync: SyncConfig,
pub max_collaborators: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthConfig {
pub method: AuthMethod,
pub session_timeout: Duration,
pub guest_access: bool,
pub required_permissions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AuthMethod {
None,
Token,
OAuth,
ApiKey,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShareConfig {
pub public_sharing: bool,
pub default_permission: PermissionLevel,
pub link_expiration: Option<Duration>,
pub password_protection: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PermissionLevel {
ReadOnly,
Comment,
Edit,
Admin,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SyncConfig {
pub sync_interval: Duration,
pub conflict_resolution: ConflictResolution,
pub operational_transforms: bool,
pub history_retention: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ConflictResolution {
LastWriterWins,
FirstWriterWins,
Manual,
Merge,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Position {
pub x: f64,
pub y: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Size {
pub width: f64,
pub height: f64,
}
impl Default for DashboardConfig {
fn default() -> Self {
Self {
title: "Interactive Dashboard".to_string(),
width: 1200,
height: 800,
theme: ThemeConfig::default(),
layout: LayoutConfig::default(),
realtime_config: RealtimeConfig::default(),
interaction_config: InteractionConfig::default(),
export_config: ExportConfig::default(),
collaboration_config: None,
}
}
}
impl Default for ThemeConfig {
fn default() -> Self {
Self {
primary_color: "#007bff".to_string(),
secondary_color: "#6c757d".to_string(),
background_color: "#ffffff".to_string(),
text_color: "#212529".to_string(),
font_family: "Arial, sans-serif".to_string(),
font_size: 14,
border_radius: 4,
shadow_enabled: true,
custom_variables: HashMap::new(),
}
}
}
impl Default for LayoutConfig {
fn default() -> Self {
Self {
layout_type: LayoutType::Grid,
grid_config: Some(GridConfig::default()),
spacing: SpacingConfig::default(),
animation: AnimationConfig::default(),
breakpoints: HashMap::new(),
}
}
}
impl Default for GridConfig {
fn default() -> Self {
Self {
columns: 12,
rows: 8,
column_gap: 16,
row_gap: 16,
auto_fit: true,
}
}
}
impl Default for SpacingConfig {
fn default() -> Self {
Self {
margin: 16,
padding: 16,
widget_spacing: 8,
container_spacing: 24,
}
}
}
impl Default for AnimationConfig {
fn default() -> Self {
Self {
enabled: true,
duration: Duration::from_millis(300),
easing: "ease-in-out".to_string(),
performance_mode: false,
}
}
}
impl Default for RealtimeConfig {
fn default() -> Self {
Self {
enabled: true,
update_interval: Duration::from_millis(1000),
buffer_size: 1000,
max_connections: 100,
protocol: StreamingProtocol::WebSocket,
connection_timeout: Duration::from_secs(30),
retry_attempts: 3,
}
}
}
impl Default for InteractionConfig {
fn default() -> Self {
Self {
touch_enabled: true,
keyboard_shortcuts: true,
zoom_pan_enabled: true,
selection_enabled: true,
drag_drop_enabled: true,
double_click_threshold: Duration::from_millis(500),
hover_delay: Duration::from_millis(300),
custom_handlers: HashMap::new(),
}
}
}
impl Default for ExportConfig {
fn default() -> Self {
Self {
formats: vec![ExportFormat::PNG, ExportFormat::SVG, ExportFormat::JSON],
default_format: ExportFormat::PNG,
quality: 90,
include_metadata: true,
compression: true,
}
}
}
impl Default for Position {
fn default() -> Self {
Self { x: 0.0, y: 0.0 }
}
}
impl Default for Size {
fn default() -> Self {
Self {
width: 100.0,
height: 100.0,
}
}
}