use crate::state::model::State;
use crate::ticket::data::get_by_number;
use serde::Serialize;
use std::fmt;
#[derive(Debug, Serialize)]
pub struct Ticket {
#[serde(skip_serializing)]
pub id: usize,
#[serde(skip_serializing)]
pub board_id: usize,
#[serde(skip_serializing)]
pub number: usize,
pub title: String,
pub description: String,
#[serde(skip_serializing)]
pub state: State,
pub blocked_by: usize,
}
impl Ticket {
pub fn new(board_id: usize, number: usize, title: String, description: String) -> Ticket {
Ticket {
id: 0,
board_id,
number,
title,
description,
state: State::ToDo,
blocked_by: 0,
}
}
}
impl fmt::Display for Ticket {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
writeln!(f, "Ticket Number: {}\n", self.number)?;
writeln!(f, "Title:\n{}\n", self.title)?;
writeln!(f, "Description:\n{}\n", self.description)?;
writeln!(f, "Current State:\n{}", self.state.to_string())?;
if self.blocked_by > 0 {
let blocking_ticket_title = get_by_number(self.board_id, self.blocked_by)
.expect("Failed to retrieve blocking ticket title.")
.title;
writeln!(
f,
"\nBlocked by Ticket {} - {}",
self.blocked_by, blocking_ticket_title
)?;
}
Ok(())
}
}