tfmcp 0.2.2

Terraform Model Context Protocol Tool - A CLI tool to manage Terraform through MCP
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct ModuleHealthAnalysis {
    pub module_path: String,
    pub metrics: ModuleMetrics,
    pub health_score: u8,
    pub issues: Vec<ModuleIssue>,
    pub recommendations: Vec<String>,
    pub cohesion_analysis: CohesionAnalysis,
    pub coupling_analysis: CouplingAnalysis,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ModuleMetrics {
    pub variable_count: usize,
    pub output_count: usize,
    pub resource_count: usize,
    pub resource_type_count: usize,
    pub provider_count: usize,
    pub data_source_count: usize,
    pub local_count: usize,
    pub module_call_count: usize,
    pub file_count: usize,
    pub lines_of_code: usize,
    pub hierarchy_depth: usize,
    pub variables_with_defaults: usize,
    pub variables_without_description: usize,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum IssueSeverity {
    Critical,
    Warning,
    Info,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ModuleIssue {
    pub severity: IssueSeverity,
    pub category: IssueCategory,
    pub message: String,
    pub file: Option<String>,
    pub line: Option<usize>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum IssueCategory {
    LogicalCohesion,
    ExcessiveVariables,
    DeepHierarchy,
    MissingDocumentation,
    ControlCoupling,
    ModelCoupling,
    NamingConvention,
    PublicModuleRisk,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct CohesionAnalysis {
    pub cohesion_type: CohesionType,
    pub score: u8,
    pub resource_type_groups: Vec<ResourceTypeGroup>,
    pub explanation: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CohesionType {
    Functional,
    Sequential,
    Communicational,
    Procedural,
    Temporal,
    Logical,
    Coincidental,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ResourceTypeGroup {
    pub name: String,
    pub resource_types: Vec<String>,
    pub resource_count: usize,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct CouplingAnalysis {
    pub coupling_type: CouplingType,
    pub score: u8,
    pub dependencies: Vec<ModuleDependency>,
    pub explanation: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CouplingType {
    Data,
    Stamp,
    Control,
    Common,
    Content,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ModuleDependency {
    pub source_module: String,
    pub target_module: String,
    pub dependency_type: String,
    pub variables_passed: Vec<String>,
}