#![cfg_attr(coverage_nightly, coverage(off))]
use serde::{Deserialize, Serialize};
use std::path::{Path, PathBuf};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TicketFile {
pub id: String,
pub title: String,
pub status: TicketStatus,
pub priority: Priority,
pub complexity: u8,
pub estimated_time: String,
pub dependencies: Vec<String>,
pub sprint: String,
pub objective: String,
pub success_criteria: Vec<String>,
pub file_path: PathBuf,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum TicketStatus {
Red,
Green,
Refactor,
Complete,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Priority {
P0,
P1,
P2,
}
#[derive(Debug, thiserror::Error)]
pub enum TicketError {
#[error("Failed to read ticket file: {0}")]
IoError(#[from] std::io::Error),
#[error("Invalid ticket format: {0}")]
ParseError(String),
#[error("Missing required field: {0}")]
MissingField(String),
#[error("Ticket not found: {0}")]
NotFound(String),
#[error("Invalid ticket status: {0}")]
InvalidStatus(String),
#[error("Invalid priority: {0}")]
InvalidPriority(String),
#[error("Invalid complexity: {0}")]
InvalidComplexity(u8),
}
pub type Result<T> = std::result::Result<T, TicketError>;
include!("ticket_impls.rs");
include!("ticket_parsing.rs");
include!("ticket_tests.rs");