use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CodingStandards {
pub edition: EditionStandards,
pub file_limits: FileLimits,
pub function_limits: FunctionLimits,
pub documentation: DocumentationStandards,
pub banned_patterns: BannedPatterns,
pub dependencies: DependencyStandards,
pub security: SecurityStandards,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EditionStandards {
pub required_edition: String,
pub min_rust_version: String,
pub auto_upgrade: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileLimits {
pub max_lines: usize,
pub max_line_length: usize,
pub exempt_files: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FunctionLimits {
pub max_lines: usize,
pub max_complexity: usize,
pub exempt_functions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentationStandards {
pub require_public_docs: bool,
pub require_private_docs: bool,
pub min_coverage: f64,
pub require_examples: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BannedPatterns {
pub ban_unwrap: bool,
pub ban_expect: bool,
pub ban_panic: bool,
pub ban_todo: bool,
pub ban_unimplemented: bool,
pub ban_underscore_bandaid: bool,
pub custom_patterns: Vec<BannedPattern>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BannedPattern {
pub name: String,
pub pattern: String,
pub message: String,
pub severity: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DependencyStandards {
pub max_dependencies: usize,
pub require_license_check: bool,
pub banned_licenses: Vec<String>,
pub require_msrv_compatible: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecurityStandards {
pub ban_unsafe: bool,
pub require_audit: bool,
pub max_cve_score: f64,
}