thot_core/project/
project.rs

1//! Project and project settings.
2use crate::types::{Creator, ResourceId};
3use chrono::prelude::*;
4use std::path::PathBuf;
5
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9// ***************
10// *** Project ***
11// ***************
12
13/// Represents a Thot project.
14#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15#[derive(Debug)]
16pub struct Project {
17    pub rid: ResourceId,
18    pub creator: Creator,
19    pub created: DateTime<Utc>,
20    pub name: String,
21    pub description: Option<String>,
22    pub data_root: Option<PathBuf>,
23    pub universal_root: Option<PathBuf>,
24    pub analysis_root: Option<PathBuf>,
25    pub meta_level: u16,
26}
27
28impl Project {
29    /// Creates a new Project.
30    pub fn new(name: &str) -> Self {
31        Project {
32            rid: ResourceId::new(),
33            name: String::from(name),
34            creator: Creator::User(None),
35            created: Utc::now(),
36            description: None,
37            data_root: None,
38            universal_root: None,
39            analysis_root: None,
40            meta_level: 0,
41        }
42    }
43}
44
45impl Default for Project {
46    fn default() -> Self {
47        Project {
48            rid: ResourceId::new(),
49            name: String::from(""),
50            creator: Creator::User(None),
51            created: Utc::now(),
52            description: None,
53            data_root: None,
54            universal_root: None,
55            analysis_root: None,
56            meta_level: 0,
57        }
58    }
59}
60
61#[cfg(test)]
62#[path = "./project_test.rs"]
63mod project_test;