mini_builder_rs/evaluator/
dependencies.rs

1use std::collections::HashSet;
2
3/// Shallow (non builder recursive) dependencies of an
4/// [super::evaluator::Evaluator].
5pub struct Dependencies {
6	pub variable_dependencies: HashSet<String>,
7	pub function_dependencies: HashSet<String>,
8	pub builder_dependencies: HashSet<String>,
9}
10
11impl Dependencies {
12	pub fn empty() -> Self {
13		Self {
14			variable_dependencies: HashSet::new(),
15			function_dependencies: HashSet::new(),
16			builder_dependencies: HashSet::new(),
17		}
18	}
19
20	pub fn add_variable(&mut self, name: impl ToString) {
21		self.variable_dependencies.insert(name.to_string());
22	}
23
24	pub fn add_function(&mut self, name: impl ToString) {
25		self.function_dependencies.insert(name.to_string());
26	}
27
28	pub fn add_builder(&mut self, name: impl ToString) {
29		self.builder_dependencies.insert(name.to_string());
30	}
31
32	pub fn contains_variable(&self, name: &str) -> bool {
33		self.variable_dependencies.contains(name)
34	}
35
36	pub fn contains_function(&self, name: &str) -> bool {
37		self.function_dependencies.contains(name)
38	}
39
40	pub fn contains_builder(&self, name: &str) -> bool {
41		self.builder_dependencies.contains(name)
42	}
43
44	pub fn iter_builder_dependencies(&self) -> impl Iterator<Item = &str> {
45		self.builder_dependencies.iter().map(|x| x.as_str())
46	}
47
48	pub fn iter_variable_dependencies(&self) -> impl Iterator<Item = &str> {
49		self.variable_dependencies.iter().map(|x| x.as_str())
50	}
51}