libtaskrs 0.1.0

Placeholder for a WIP project
Documentation
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(),
        }
    }
}