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 a location-independent path to its
10/// workspace config.
11#[derive(Clone, Debug, Serialize, Deserialize, Getters, TypedBuilder)]
12#[getset(get = "pub")]
13pub struct Project {
14    name: ProjectName,
15    config: PathBuf,
16}
17
18#[cfg(test)]
19mod tests {
20    use super::*;
21
22    #[test]
23    fn deserializes_name_and_config() {
24        let project: Project =
25            serde_yaml_ng::from_str("name: muster\nconfig: ~/Projects/muster/muster.yml").unwrap();
26        assert_eq!(project.name().as_ref(), "muster");
27        assert_eq!(
28            project.config(),
29            &PathBuf::from("~/Projects/muster/muster.yml")
30        );
31    }
32}