use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone, JsonSchema)]
pub struct RelationshipAnalysis {
pub core_dependencies: Vec<CoreDependency>,
pub architecture_layers: Vec<ArchitectureLayer>,
pub key_insights: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, JsonSchema)]
pub struct CoreDependency {
pub from: String,
pub to: String,
pub dependency_type: DependencyType,
pub importance: u8,
pub description: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, JsonSchema)]
pub struct ArchitectureLayer {
pub name: String,
pub components: Vec<String>,
pub level: u8,
}
#[derive(Debug, Serialize, Deserialize, Clone, JsonSchema)]
pub enum DependencyType {
Import,
FunctionCall,
Inheritance,
Composition,
DataFlow,
Module,
}
impl DependencyType {
pub fn as_str(&self) -> &'static str {
match self {
DependencyType::Import => "import",
DependencyType::FunctionCall => "function_call",
DependencyType::Inheritance => "inheritance",
DependencyType::Composition => "composition",
DependencyType::DataFlow => "data_flow",
DependencyType::Module => "module",
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone, JsonSchema)]
pub struct CouplingAnalysis {
pub overall_score: u8,
pub high_coupling_components: Vec<String>,
pub main_issues: Vec<String>,
}