#![cfg_attr(coverage_nightly, coverage(off))]
use super::{DateTime, QualityGateConfig, Utc};
use anyhow::Result;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum QualityCheck {
Complexity(u32),
TestCoverage(u8),
Documentation,
NoSatd,
LintCompliance,
RoadmapUpdated,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckResult {
pub check: QualityCheck,
pub passed: bool,
pub message: String,
pub details: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualityReport {
pub task_id: String,
pub timestamp: DateTime<Utc>,
pub checks: Vec<CheckResult>,
pub overall_passed: bool,
}
impl QualityReport {
#[must_use]
pub fn new(task_id: &str) -> Self {
Self {
task_id: task_id.to_string(),
timestamp: Utc::now(),
checks: Vec::new(),
overall_passed: true,
}
}
pub fn add_check_result(&mut self, _check: QualityCheck, result: CheckResult) {
if !result.passed {
self.overall_passed = false;
}
self.checks.push(result);
}
#[must_use]
pub fn passed(&self) -> bool {
self.overall_passed
}
}
pub struct TaskQualityGate {
task_id: String,
checks: Vec<QualityCheck>,
config: QualityGateConfig,
}
pub struct QualityGateEnforcer {
pub config: QualityGateConfig,
}
include!("quality_validation.rs");
include!("quality_enforcer.rs");
include!("quality_tests.rs");