d3vlog 0.7.0

A tiny developer journal that lives in your terminal
use std::fmt::Display;

use chrono::{DateTime, Utc};
use uuid::Uuid;

use crate::data::status::DevLogEntryStatus;

#[derive(Debug, Clone)]
pub struct DevLogEntry {
    pub id: String,
    pub created_at: DateTime<Utc>,
    pub message: String,
    pub status: DevLogEntryStatus,
}

impl DevLogEntry {
    pub fn new(message: &str) -> Self {
        Self {
            id: Uuid::now_v7().to_string(),
            created_at: Utc::now(),
            message: String::from(message),
            status: DevLogEntryStatus::InProgress,
        }
    }
}

impl Display for DevLogEntry {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "[{}] {} {} {}",
            self.created_at.format("%Y-%m-%d %H:%M UTC"),
            self.status,
            self.id,
            self.message
        )
    }
}