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 #[serde(default)]
13 pub required: BTreeSet<String>,
14 #[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}