#![cfg_attr(coverage_nightly, coverage(off))]
use crate::services::normalized_score::NormalizedScore;
use serde::{Deserialize, Serialize};
use std::fmt;
use std::path::PathBuf;
pub const REPO_SCORE_MAX_POINTS: f64 = 110.0;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RepoScore {
pub total_score: f64,
pub grade: Grade, pub categories: CategoryScores,
pub recommendations: Vec<Recommendation>,
pub metadata: ScoreMetadata,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum Grade {
APlus, A, AMinus, BPlus, B, C, D, F, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CategoryScores {
pub documentation: CategoryScore, pub precommit_hooks: CategoryScore, pub repository_hygiene: CategoryScore, pub build_test_automation: CategoryScore, pub continuous_integration: CategoryScore, pub pmat_compliance: CategoryScore, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CategoryScore {
pub score: f64, pub max_score: f64, pub percentage: f64, pub status: ScoreStatus, pub subcategories: Vec<SubcategoryScore>,
pub findings: Vec<Finding>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubcategoryScore {
pub id: String, pub name: String, pub score: f64,
pub max_score: f64,
pub findings: Vec<Finding>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BonusScores {
pub property_tests: BonusItem, pub fuzzing: BonusItem, pub mutation_testing: BonusItem, pub living_docs: BonusItem, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BonusItem {
pub points: f64,
pub max_points: f64,
pub detected: bool,
pub evidence: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Finding {
pub severity: Severity,
pub category: String,
pub message: String,
pub location: Option<String>, pub impact_points: f64, }
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum Severity {
Success, Warning, Error, Info, }
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum ScoreStatus {
Pass, Warning, Fail, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Recommendation {
pub priority: Priority,
pub category: String,
pub title: String,
pub description: String,
pub impact_points: f64, pub estimated_effort: String, pub commands: Vec<String>, }
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
pub enum Priority {
Critical, High, Medium, Low, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScoreMetadata {
pub timestamp: String, pub repository_path: PathBuf,
pub git_branch: Option<String>,
pub git_commit: Option<String>,
pub pmat_version: String,
pub spec_version: String, pub execution_time_ms: u64,
}
include!("models_impls.rs");
include!("models_tests.rs");