From d9054f5364f78d6ca7c46af88d5a922fcdfb4d77 Mon Sep 17 00:00:00 2001
From: Jason Volk <jason@zemos.net>
Date: Fri, 14 Jun 2024 17:53:40 +0000
Subject: [PATCH] add backreference to layer in capture data struct

Signed-off-by: Jason Volk <jason@zemos.net>
---
 src/core/log/capture/data.rs  |  3 ++-
 src/core/log/capture/layer.rs | 10 ++++++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/core/log/capture/data.rs b/src/core/log/capture/data.rs
index ea104f571..3f92101d2 100644
--- a/src/core/log/capture/data.rs
+++ b/src/core/log/capture/data.rs
@@ -1,9 +1,10 @@
 use tracing::Level;
 use tracing_core::{span::Current, Event};
 
-use super::layer::Value;
+use super::{layer::Value, Layer};
 
 pub struct Data<'a> {
+	pub layer: &'a Layer,
 	pub event: &'a Event<'a>,
 	pub current: &'a Current,
 	pub values: Option<&'a mut [Value]>,
diff --git a/src/core/log/capture/layer.rs b/src/core/log/capture/layer.rs
index 48b125daf..19d76771c 100644
--- a/src/core/log/capture/layer.rs
+++ b/src/core/log/capture/layer.rs
@@ -40,12 +40,12 @@ fn on_event(&self, event: &Event<'_>, ctx: Context<'_, S>) {
 			.read()
 			.expect("shared lock")
 			.iter()
-			.filter(|capture| filter(capture, event, &ctx))
-			.for_each(|capture| handle(capture, event, &ctx));
+			.filter(|capture| filter(self, capture, event, &ctx))
+			.for_each(|capture| handle(self, capture, event, &ctx));
 	}
 }
 
-fn handle<S>(capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>)
+fn handle<S>(layer: &Layer, capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>)
 where
 	S: Subscriber + for<'a> LookupSpan<'a>,
 {
@@ -56,18 +56,20 @@ fn handle<S>(capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>)
 
 	let mut closure = capture.closure.lock().expect("exclusive lock");
 	closure(Data {
+		layer,
 		event,
 		current: &ctx.current_span(),
 		values: Some(&mut visitor.values),
 	});
 }
 
-fn filter<S>(capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>) -> bool
+fn filter<S>(layer: &Layer, capture: &Capture, event: &Event<'_>, ctx: &Context<'_, S>) -> bool
 where
 	S: Subscriber + for<'a> LookupSpan<'a>,
 {
 	capture.filter.as_ref().map_or(true, |filter| {
 		filter(Data {
+			layer,
 			event,
 			current: &ctx.current_span(),
 			values: None,
-- 
GitLab