Skip to content

Commit dc0677b

Browse files
fix semver breakage
1 parent e6dbb47 commit dc0677b

2 files changed

Lines changed: 45 additions & 2 deletions

File tree

examples/extension-telemetry-generic/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ async fn main() -> Result<(), Error> {
2020
let telemetry_processor = SharedService::new(service_fn(handler));
2121

2222
Extension::new()
23+
.with_telemetry_record_type::<serde_json::Value>()
2324
.with_telemetry_processor(telemetry_processor)
2425
.run()
2526
.await?;

lambda-extension/src/extension.rs

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,14 @@ where
185185
}
186186

187187
/// Create a new [`Extension`] with a service that receives Lambda telemetry data.
188-
pub fn with_telemetry_processor<N, NS, NL>(self, lp: N) -> Extension<'a, E, L, N, NL>
188+
pub fn with_telemetry_processor<N, NS>(self, lp: N) -> Extension<'a, E, L, N, TL>
189189
where
190190
N: Service<()>,
191191
N::Future: Future<Output = Result<NS, N::Error>>,
192192
N::Error: Into<Error> + fmt::Display,
193193
{
194194
Extension {
195195
telemetry_processor: Some(lp),
196-
_telemetry_record_type: PhantomData,
197196
events_processor: self.events_processor,
198197
extension_name: self.extension_name,
199198
events: self.events,
@@ -204,6 +203,7 @@ where
204203
telemetry_types: self.telemetry_types,
205204
telemetry_buffering: self.telemetry_buffering,
206205
telemetry_port_number: self.telemetry_port_number,
206+
_telemetry_record_type: self._telemetry_record_type,
207207
}
208208
}
209209

@@ -352,6 +352,48 @@ where
352352
}
353353
}
354354

355+
impl<'a, E, L> Extension<'a, E, L, MakeIdentity<Vec<LambdaTelemetry>>> {
356+
/// Set the deserialization type for telemetry log records.
357+
///
358+
/// By default, telemetry log records are deserialized as `String`, but
359+
/// it's possible to configure Lambda functions to emit logs in JSON format.
360+
/// Use this method to deserialize into a different type, such as
361+
/// `serde_json::Value`.
362+
///
363+
/// Must be called before [`Self::with_telemetry_processor`].
364+
///
365+
/// ```
366+
/// use lambda_extension::{Extension, LambdaTelemetry, SharedService, service_fn};
367+
///
368+
/// async fn handler(events: Vec<LambdaTelemetry<serde_json::Value>>) -> Result<(), lambda_extension::Error> {
369+
/// for event in &events {
370+
/// println!("{event:?}");
371+
/// }
372+
/// Ok(())
373+
/// }
374+
///
375+
/// let _ext = Extension::new()
376+
/// .with_telemetry_record_type::<serde_json::Value>()
377+
/// .with_telemetry_processor(SharedService::new(service_fn(handler)));
378+
/// ```
379+
pub fn with_telemetry_record_type<N>(self) -> Extension<'a, E, L, MakeIdentity<Vec<LambdaTelemetry<N>>>, N> {
380+
Extension {
381+
_telemetry_record_type: PhantomData,
382+
telemetry_processor: None,
383+
events_processor: self.events_processor,
384+
extension_name: self.extension_name,
385+
events: self.events,
386+
log_types: self.log_types,
387+
log_buffering: self.log_buffering,
388+
logs_processor: self.logs_processor,
389+
log_port_number: self.log_port_number,
390+
telemetry_types: self.telemetry_types,
391+
telemetry_buffering: self.telemetry_buffering,
392+
telemetry_port_number: self.telemetry_port_number,
393+
}
394+
}
395+
}
396+
355397
/// An extension registered by calling [`Extension::register`].
356398
pub struct RegisteredExtension<E> {
357399
/// The ID of the registered extension. This ID is unique per extension and remains constant

0 commit comments

Comments
 (0)