planner / src/model.rs

raw file 2253 bytes
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>,
}