|
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