|
1 | 1 | use std::sync::{Arc, Mutex}; |
2 | 2 |
|
3 | 3 | #[salsa_macros::db] |
4 | | -#[derive(Default, Clone)] |
| 4 | +#[derive(Clone)] |
5 | 5 | pub(crate) struct LoggerDb { |
6 | 6 | storage: salsa::Storage<Self>, |
7 | 7 | logger: Logger, |
8 | 8 | } |
9 | 9 |
|
| 10 | +impl Default for LoggerDb { |
| 11 | + fn default() -> Self { |
| 12 | + let logger = Logger::default(); |
| 13 | + Self { |
| 14 | + storage: salsa::Storage::new(Some(Box::new({ |
| 15 | + let logger = logger.clone(); |
| 16 | + move |event| match event.kind { |
| 17 | + salsa::EventKind::WillExecute { .. } |
| 18 | + | salsa::EventKind::WillCheckCancellation |
| 19 | + | salsa::EventKind::DidValidateMemoizedValue { .. } |
| 20 | + | salsa::EventKind::WillDiscardStaleOutput { .. } |
| 21 | + | salsa::EventKind::DidDiscard { .. } => { |
| 22 | + logger.logs.lock().unwrap().push(format!("salsa_event({:?})", event.kind)); |
| 23 | + } |
| 24 | + _ => {} |
| 25 | + } |
| 26 | + }))), |
| 27 | + logger, |
| 28 | + } |
| 29 | + } |
| 30 | +} |
| 31 | + |
10 | 32 | #[derive(Default, Clone)] |
11 | 33 | struct Logger { |
12 | 34 | logs: Arc<Mutex<Vec<String>>>, |
13 | 35 | } |
14 | 36 |
|
15 | 37 | #[salsa_macros::db] |
16 | | -impl salsa::Database for LoggerDb { |
17 | | - fn salsa_event(&self, event: &dyn Fn() -> salsa::Event) { |
18 | | - let event = event(); |
19 | | - match event.kind { |
20 | | - salsa::EventKind::WillExecute { .. } |
21 | | - | salsa::EventKind::WillCheckCancellation |
22 | | - | salsa::EventKind::DidValidateMemoizedValue { .. } |
23 | | - | salsa::EventKind::WillDiscardStaleOutput { .. } |
24 | | - | salsa::EventKind::DidDiscard { .. } => { |
25 | | - self.push_log(format!("salsa_event({:?})", event.kind)); |
26 | | - } |
27 | | - _ => {} |
28 | | - } |
29 | | - } |
30 | | -} |
| 38 | +impl salsa::Database for LoggerDb {} |
31 | 39 |
|
32 | 40 | impl LoggerDb { |
33 | 41 | /// Log an event from inside a tracked function. |
|
0 commit comments