@@ -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`].
356398pub struct RegisteredExtension < E > {
357399 /// The ID of the registered extension. This ID is unique per extension and remains constant
0 commit comments