use std::path::PathBuf;
use time::OffsetDateTime;
use super::types::ProjectId;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ProjectStatus {
Active,
Archived,
}
impl ProjectStatus {
pub fn as_str(&self) -> &'static str {
match self {
Self::Active => "active",
Self::Archived => "archived",
}
}
pub fn from_str_value(s: &str) -> Option<Self> {
match s {
"active" => Some(Self::Active),
"archived" => Some(Self::Archived),
_ => None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ProjectSource {
Manual,
Discovered,
}
impl ProjectSource {
pub fn as_str(&self) -> &'static str {
match self {
Self::Manual => "manual",
Self::Discovered => "discovered",
}
}
pub fn from_str_value(s: &str) -> Self {
match s {
"discovered" => Self::Discovered,
_ => Self::Manual,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct Project {
pub id: ProjectId,
pub name: String,
pub paths: Vec<PathBuf>,
pub tags: Vec<String>,
pub hourly_rate_cents: Option<i64>,
pub status: ProjectStatus,
pub source: ProjectSource,
pub created_at: OffsetDateTime,
pub updated_at: OffsetDateTime,
}