use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Blueprint {
pub source_path: PathBuf,
pub language: String, pub elements: Vec<Element>,
pub dependencies: Vec<String>, }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Element {
Module(Module),
Class(Class),
Function(Function),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Module {
pub name: String,
pub documentation: Documentation,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Class {
pub name: String,
pub visibility: Visibility,
pub methods: Vec<Method>,
pub properties: Vec<Property>,
pub documentation: Documentation,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Function {
pub name: String,
pub visibility: Visibility,
pub signature: Signature,
pub documentation: Documentation,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Method {
pub name: String,
pub visibility: Visibility,
pub is_static: bool,
pub signature: Signature,
pub documentation: Documentation,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Property {
pub name: String,
pub visibility: Visibility,
pub type_annotation: Option<String>, pub documentation: Documentation,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Signature {
pub parameters: Vec<Parameter>,
pub return_type: Option<String>, }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Parameter {
pub name: String,
pub type_annotation: Option<String>, pub default_value: Option<String>, }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Visibility {
Public,
Private,
Protected,
Internal, }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Documentation {
pub summary: Option<String>, pub description: Option<String>, pub examples: Vec<String>, }