use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct PartialDate {
pub year: Option<u16>,
pub month: Option<u8>,
pub day: Option<u8>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct DateRange {
pub start: Option<PartialDate>,
pub end: Option<PartialDate>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Experience {
pub company: Option<String>,
pub role: Option<String>,
pub location: Option<String>,
pub duration: Option<DateRange>,
pub summary: Option<String>,
pub highlights: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Education {
pub institution: Option<String>,
pub degree: Option<String>,
pub field: Option<String>,
pub duration: Option<DateRange>,
pub grade: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct SkillGroup {
pub category: Option<String>,
pub items: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Project {
pub name: Option<String>,
pub description: Option<String>,
pub technologies: Vec<String>,
pub url: Option<String>,
pub duration: Option<DateRange>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Certification {
pub name: Option<String>,
pub issuer: Option<String>,
pub issued: Option<PartialDate>,
pub expiry: Option<PartialDate>,
pub credential_id: Option<String>,
pub url: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Language {
pub language: Option<String>,
pub proficiency: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Award {
pub title: Option<String>,
pub issuer: Option<String>,
pub date: Option<PartialDate>,
pub description: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
pub struct Resume {
pub name: Option<String>,
pub email: Option<String>,
pub phone: Option<String>,
pub location: Option<String>,
pub linkedin: Option<String>,
pub github: Option<String>,
pub website: Option<String>,
pub summary: Option<String>,
pub experience: Vec<Experience>,
pub education: Vec<Education>,
pub skills: Vec<SkillGroup>,
pub projects: Vec<Project>,
pub certifications: Vec<Certification>,
pub languages: Vec<Language>,
pub awards: Vec<Award>,
}