Skip to main content

muster/domain/
project.rs

1use std::path::PathBuf;
2
3use getset::Getters;
4use serde::{Deserialize, Serialize};
5use typed_builder::TypedBuilder;
6
7use crate::domain::value::ProjectName;
8
9/// A registered project: a display name and the path to its workspace config.
10#[derive(Clone, Debug, Serialize, Deserialize, Getters, TypedBuilder)]
11#[getset(get = "pub")]
12pub struct Project {
13    name: ProjectName,
14    config: PathBuf,
15}
16
17#[cfg(test)]
18mod tests {
19    use super::*;
20
21    #[test]
22    fn deserializes_name_and_config() {
23        let project: Project =
24            serde_yaml_ng::from_str("name: muster\nconfig: ~/Projects/muster/muster.yml").unwrap();
25        assert_eq!(project.name().as_ref(), "muster");
26        assert_eq!(
27            project.config(),
28            &PathBuf::from("~/Projects/muster/muster.yml")
29        );
30    }
31}