module_util/evaluator/metrics/
mod.rs1use std::collections::HashSet;
4use std::hash::Hash;
5
6use super::{Evaluator, Imports};
7
8#[derive(Debug, Clone)]
12pub struct Metrics<E>
13where
14 E: Evaluator,
15{
16 evaluator: E,
17
18 pub modules: HashSet<E::Id>,
20}
21
22impl<E> Metrics<E>
23where
24 E: Evaluator,
25{
26 pub fn new(evaluator: E) -> Self {
28 Self {
29 evaluator,
30 modules: HashSet::new(),
31 }
32 }
33}
34
35impl<E> Default for Metrics<E>
36where
37 E: Evaluator + Default,
38{
39 fn default() -> Self {
40 Self::new(Default::default())
41 }
42}
43
44impl<E> Metrics<E>
45where
46 E: Evaluator + Default,
47{
48 pub fn get(&self) -> &E {
50 &self.evaluator
51 }
52
53 pub fn get_mut(&mut self) -> &mut E {
55 &mut self.evaluator
56 }
57}
58
59impl<E> Evaluator for Metrics<E>
60where
61 E: Evaluator,
62 E::Id: Clone + Eq + Hash,
63{
64 type Id = E::Id;
65 type Module = E::Module;
66 type Error = E::Error;
67
68 fn is_empty(&self) -> bool {
69 self.evaluator.is_empty()
70 }
71
72 fn next(&mut self) -> Option<Self::Id> {
73 self.evaluator.next()
74 }
75
76 fn eval(
77 &mut self,
78 id: Self::Id,
79 imports: Imports<Self::Id>,
80 module: Self::Module,
81 ) -> Result<(), Self::Error> {
82 self.modules.insert(id.clone());
83 self.evaluator.eval(id, imports, module)
84 }
85
86 fn finish(self) -> Option<Self::Module> {
87 self.evaluator.finish()
88 }
89}