use core::fmt;
use boilermates::boilermates;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use utoipa::ToSchema;
pub type TaskId = i64;
#[derive(Debug, Serialize, Deserialize, Eq, PartialEq, ToSchema)]
pub struct Project {
id: u32,
}
impl Project {}
#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, sqlx::Type, ToSchema)]
pub enum TaskStatus {
NotStarted,
InProgress,
Complete,
}
impl From<String> for TaskStatus {
fn from(s: String) -> Self {
match s.as_str() {
"NotStarted" => TaskStatus::NotStarted,
"InProgress" => TaskStatus::InProgress,
"Complete" => TaskStatus::Complete,
_ => TaskStatus::NotStarted,
}
}
}
#[boilermates("TaskRequest", "TaskResponse")]
#[boilermates(attr_for(
"TaskRequest",
"#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]"
))]
#[boilermates(attr_for(
"TaskResponse",
"#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, ToSchema)]"
))]
#[derive(Debug, Serialize, Deserialize, FromRow, Clone, ToSchema)]
pub struct Task {
pub content: String,
#[boilermates(not_in("TaskRequest"))]
pub status: TaskStatus,
#[boilermates(not_in("TaskRequest"))]
pub creation_date: String,
#[boilermates(not_in("TaskRequest"))]
pub id: TaskId,
}
impl TaskRequest {
pub fn new(content: &str) -> Self {
TaskRequest {
content: content.to_string(),
}
}
}