use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalysisResult {
pub summary: String,
pub insights: Vec<String>,
pub recommendations: Vec<String>,
pub patterns: Vec<String>,
pub confidence: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualityMetrics {
pub score: f32,
pub complexity: f32,
pub maintainability: f32,
pub test_coverage: f32,
pub documentation: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecurityAnalysis {
pub issues: Vec<SecurityIssue>,
pub score: f32,
pub recommendations: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecurityIssue {
pub issue_type: String,
pub severity: String,
pub description: String,
pub file_path: String,
pub line_number: Option<usize>,
pub recommendation: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceAnalysis {
pub bottlenecks: Vec<PerformanceIssue>,
pub score: f32,
pub optimizations: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceIssue {
pub issue_type: String,
pub impact: String,
pub description: String,
pub file_path: String,
pub line_number: Option<usize>,
pub optimization: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComprehensiveAnalysis {
pub analysis: AnalysisResult,
pub quality: QualityMetrics,
pub security: SecurityAnalysis,
pub performance: PerformanceAnalysis,
pub tech_stack: Vec<String>,
pub dependencies: DependencyAnalysis,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DependencyAnalysis {
pub direct: Vec<Dependency>,
pub transitive: Vec<Dependency>,
pub outdated: Vec<Dependency>,
pub vulnerable: Vec<VulnerableDependency>,
pub license_issues: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Dependency {
pub name: String,
pub version: String,
pub latest_version: Option<String>,
pub license: Option<String>,
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VulnerableDependency {
pub dependency: Dependency,
pub vulnerabilities: Vec<Vulnerability>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Vulnerability {
pub cve_id: Option<String>,
pub severity_score: Option<f32>,
pub severity_level: String,
pub title: String,
pub description: String,
pub affected_versions: Vec<String>,
pub fixed_versions: Vec<String>,
}
impl Default for QualityMetrics {
fn default() -> Self {
Self {
score: 0.5,
complexity: 0.5,
maintainability: 0.5,
test_coverage: 0.0,
documentation: 0.5,
}
}
}
impl Default for SecurityAnalysis {
fn default() -> Self {
Self {
issues: vec![],
score: 0.5,
recommendations: vec![],
}
}
}
impl Default for PerformanceAnalysis {
fn default() -> Self {
Self {
bottlenecks: vec![],
score: 0.5,
optimizations: vec![],
}
}
}