use super::*;
#[derive(Debug, Clone)]
pub struct AnalysisReport {
pub report_type: ReportType,
pub title: String,
pub content: ReportContent,
pub timestamp: Instant,
pub metadata: ReportMetadata,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ReportType {
PerformanceSummary,
DetailedAnalysis,
TrendAnalysis,
BenchmarkReport,
BottleneckAnalysis,
OptimizationReport,
ComparisonReport,
Custom { report_name: String },
}
#[derive(Debug, Clone)]
pub struct ReportContent {
pub executive_summary: String,
pub key_findings: Vec<String>,
pub sections: Vec<ReportSection>,
pub visualizations: Vec<Visualization>,
pub appendices: Vec<Appendix>,
}
#[derive(Debug, Clone)]
pub struct ReportSection {
pub title: String,
pub content: String,
pub subsections: Vec<Self>,
pub figures: Vec<Figure>,
}
#[derive(Debug, Clone)]
pub struct Visualization {
pub viz_type: VisualizationType,
pub title: String,
pub data: VisualizationData,
pub config: RenderingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum VisualizationType {
LineChart,
BarChart,
Histogram,
ScatterPlot,
BoxPlot,
HeatMap,
NetworkGraph,
Timeline,
Dashboard,
}
#[derive(Debug, Clone)]
pub enum VisualizationData {
TimeSeries {
x: Vec<f64>,
y: Vec<f64>,
},
Scatter {
x: Vec<f64>,
y: Vec<f64>,
},
Histogram {
values: Vec<f64>,
bins: usize,
},
HeatMap {
matrix: Array2<f64>,
},
Network {
nodes: Vec<String>,
edges: Vec<(usize, usize)>,
},
}
#[derive(Debug, Clone)]
pub struct RenderingConfig {
pub width: usize,
pub height: usize,
pub color_scheme: String,
pub labels: HashMap<String, String>,
pub style_options: HashMap<String, String>,
}
#[derive(Debug, Clone)]
pub struct Figure {
pub caption: String,
pub data: FigureData,
pub position: FigurePosition,
}
#[derive(Debug, Clone)]
pub enum FigureData {
Table {
headers: Vec<String>,
rows: Vec<Vec<String>>,
},
Image {
path: String,
alt_text: String,
},
Chart {
visualization: Visualization,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FigurePosition {
Here,
Top,
Bottom,
Page,
Float,
}
#[derive(Debug, Clone)]
pub struct Appendix {
pub title: String,
pub content: AppendixContent,
}
#[derive(Debug, Clone)]
pub enum AppendixContent {
RawData { data: String },
Code { language: String, code: String },
Configuration { config: String },
References { references: Vec<String> },
}
#[derive(Debug, Clone)]
pub struct ReportMetadata {
pub author: String,
pub version: String,
pub format: ReportFormat,
pub tags: Vec<String>,
pub recipients: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ReportFormat {
PDF,
HTML,
Markdown,
LaTeX,
JSON,
XML,
}