esteem/
dependencies.rs

1use super::{
2    constants::{DEVELOPMENT_KEY, REQUIRED_KEY},
3    AddEsteemDevelopmentDependency, AddEsteemRequiredDependency, LibraryError,
4    RemoveEsteemDevelopmentDependency, RemoveEsteemRequiredDependency,
5};
6use serde::{Deserialize, Serialize};
7use std::collections::BTreeSet;
8
9#[derive(Debug, Serialize, Deserialize, Clone)]
10pub struct EsteemDependencies {
11    /// dependencies of the project/workspace
12    #[serde(default)]
13    pub required: BTreeSet<String>,
14    /// devDependencies of the project/workspace
15    #[serde(default)]
16    pub development: BTreeSet<String>,
17}
18
19impl EsteemDependencies {
20    pub(crate) fn get_all_dependencies(&self) -> Vec<String> {
21        Vec::from_iter(
22            self.development
23                .iter()
24                .chain(self.required.iter())
25                .map(String::from),
26        )
27    }
28}
29
30impl Default for EsteemDependencies {
31    fn default() -> Self {
32        let required = BTreeSet::new();
33        let development = BTreeSet::new();
34        Self {
35            required,
36            development,
37        }
38    }
39}
40
41impl AddEsteemRequiredDependency for EsteemDependencies {
42    fn add_required_dependency(&mut self, dependency: String) {
43        info!("Adding {REQUIRED_KEY} dependency {dependency:?}");
44        self.required.insert(dependency);
45    }
46}
47
48impl AddEsteemDevelopmentDependency for EsteemDependencies {
49    fn add_development_dependency(&mut self, dependency: String) {
50        info!("Adding {DEVELOPMENT_KEY} dependency {dependency:?}");
51        self.development.insert(dependency);
52    }
53}
54
55impl RemoveEsteemRequiredDependency for EsteemDependencies {
56    fn remove_required_dependency(
57        &mut self,
58        dependency: String,
59    ) -> Result<(), LibraryError> {
60        info!("Trying to remove {REQUIRED_KEY} dependency {dependency:?}");
61        self.required
62            .take(&dependency)
63            .map(|_| {
64                info!("Found and removed {REQUIRED_KEY} dependency {dependency:?} successfully");
65            })
66            .ok_or_else(|| {
67                LibraryError(format!(
68                    "Could not find {REQUIRED_KEY} dependency to remove: {dependency:?}"
69                ))
70            })
71    }
72}
73
74impl RemoveEsteemDevelopmentDependency for EsteemDependencies {
75    fn remove_development_dependency(
76        &mut self,
77        dependency: String,
78    ) -> Result<(), LibraryError> {
79        info!("Trying to remove {DEVELOPMENT_KEY} dependency {dependency:?}");
80        self.development
81            .take(&dependency)
82            .map(|_| {
83                info!("Found and removed {DEVELOPMENT_KEY} dependency {dependency:?} successfully");
84            })
85            .ok_or_else(|| {
86                LibraryError(format!(
87                    "Could not find {DEVELOPMENT_KEY} dependency to remove: {dependency:?}"
88                ))
89            })
90    }
91}