use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Language {
pub id: String,
pub name: String,
pub tagline: String,
pub strengths: Vec<String>,
pub weaknesses: Vec<String>,
pub best_for: Vec<String>,
pub ecosystem: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Library {
pub name: String,
pub lang: String,
pub domain: String,
pub purpose: String,
pub url: Option<String>,
pub note: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Stack {
pub language: String,
pub framework: Option<String>,
pub libraries: Vec<String>,
pub rationale: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Requirement {
pub key: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PlanTask {
pub id: String,
pub title: String,
pub description: String,
pub depends_on: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Milestone {
pub name: String,
pub goal: String,
pub tasks: Vec<PlanTask>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProjectPlan {
pub name: String,
pub description: String,
pub project_type: String,
pub audience: String,
pub scale: String,
pub requirements: Vec<Requirement>,
pub stack: Stack,
pub libraries: Vec<Library>,
pub architecture: String,
pub file_tree: Vec<String>,
pub milestones: Vec<Milestone>,
pub coding_standards: Vec<String>,
pub risks: Vec<String>,
pub template: Option<String>,
pub created_at: String,
#[serde(default)]
pub ai_assistance: Option<String>,
#[serde(default)]
pub language_guidance: Option<String>,
#[serde(default)]
pub domain: String,
#[serde(default)]
pub domain_guidance: Option<String>,
#[serde(default)]
pub pitfalls: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TemplateManifest {
pub name: String,
pub slug: String,
pub description: String,
pub category: String,
pub default_language: String,
pub default_stack: Vec<String>,
pub tags: Vec<String>,
}