@@ -11,23 +11,23 @@ use tracing::{error, trace};
1111
1212/// Payload received from the Telemetry API
1313#[ derive( Clone , Debug , Deserialize , Serialize , PartialEq ) ]
14- pub struct LambdaTelemetry {
14+ pub struct LambdaTelemetry < L = String > {
1515 /// Time when the telemetry was generated
1616 pub time : DateTime < Utc > ,
1717 /// Telemetry record entry
1818 #[ serde( flatten) ]
19- pub record : LambdaTelemetryRecord ,
19+ pub record : LambdaTelemetryRecord < L > ,
2020}
2121
2222/// Record in a LambdaTelemetry entry
2323#[ derive( Clone , Debug , Deserialize , Serialize , PartialEq ) ]
2424#[ serde( tag = "type" , content = "record" , rename_all = "lowercase" ) ]
25- pub enum LambdaTelemetryRecord {
25+ pub enum LambdaTelemetryRecord < L = String > {
2626 /// Function log records
27- Function ( String ) ,
27+ Function ( L ) ,
2828
2929 /// Extension log records
30- Extension ( String ) ,
30+ Extension ( L ) ,
3131
3232 /// Platform init start record
3333 #[ serde( rename = "platform.initStart" , rename_all = "camelCase" ) ]
@@ -319,12 +319,12 @@ mod deserialization_tests {
319319 use chrono:: { TimeDelta , TimeZone } ;
320320
321321 macro_rules! deserialize_tests {
322- ( $( $name: ident: $value: expr, ) * ) => {
322+ ( $( $name: ident$ ( <$log : ty> ) ? : $value: expr, ) * ) => {
323323 $(
324324 #[ test]
325325 fn $name( ) {
326326 let ( input, expected) = $value;
327- let actual = serde_json:: from_str:: <LambdaTelemetry >( & input) . expect( "unable to deserialize" ) ;
327+ let actual = serde_json:: from_str:: <LambdaTelemetry $ ( <$log> ) ? >( & input) . expect( "unable to deserialize" ) ;
328328
329329 assert!( actual. record == expected) ;
330330 }
@@ -339,12 +339,24 @@ mod deserialization_tests {
339339 LambdaTelemetryRecord :: Function ( "hello world" . to_string( ) ) ,
340340 ) ,
341341
342+ // function (json)
343+ function_json<bool >: (
344+ r#"{"time": "2020-08-20T12:31:32.123Z","type": "function", "record": true}"# ,
345+ LambdaTelemetryRecord :: Function ( true ) ,
346+ ) ,
347+
342348 // extension
343349 extension: (
344350 r#"{"time": "2020-08-20T12:31:32.123Z","type": "extension", "record": "hello world"}"# ,
345351 LambdaTelemetryRecord :: Extension ( "hello world" . to_string( ) ) ,
346352 ) ,
347353
354+ // extension (json)
355+ extension_json<bool >: (
356+ r#"{"time": "2020-08-20T12:31:32.123Z","type": "extension", "record": true}"# ,
357+ LambdaTelemetryRecord :: Extension ( true ) ,
358+ ) ,
359+
348360 // platform.start
349361 platform_start: (
350362 r#"{"time":"2022-10-21T14:05:03.165Z","type":"platform.start","record":{"requestId":"459921b5-681c-4a96-beb0-81e0aa586026","version":"$LATEST","tracing":{"spanId":"24cd7d670fa455f0","type":"X-Amzn-Trace-Id","value":"Root=1-6352a70e-1e2c502e358361800241fd45;Parent=35465b3a9e2f7c6a;Sampled=1"}}}"# ,
@@ -477,11 +489,11 @@ mod serialization_tests {
477489
478490 use super :: * ;
479491 macro_rules! serialize_tests {
480- ( $( $name: ident: $value: expr, ) * ) => {
492+ ( $( $name: ident$ ( <$log : ty> ) ? : $value: expr, ) * ) => {
481493 $(
482494 #[ test]
483495 fn $name( ) {
484- let ( input, expected) = $value;
496+ let ( input, expected) : ( LambdaTelemetry $ ( <$log> ) ? , & str ) = $value;
485497 let actual = serde_json:: to_string( & input) . expect( "unable to serialize" ) ;
486498 println!( "Input: {:?}\n " , input) ;
487499 println!( "Expected:\n {:?}\n " , expected) ;
@@ -502,6 +514,14 @@ mod serialization_tests {
502514 } ,
503515 r#"{"time":"2023-11-28T12:00:09Z","type":"function","record":"hello world"}"# ,
504516 ) ,
517+ // function (json)
518+ function_json<bool >: (
519+ LambdaTelemetry {
520+ time: Utc . with_ymd_and_hms( 2023 , 11 , 28 , 12 , 0 , 9 ) . unwrap( ) ,
521+ record: LambdaTelemetryRecord :: Function ( true ) ,
522+ } ,
523+ r#"{"time":"2023-11-28T12:00:09Z","type":"function","record":true}"# ,
524+ ) ,
505525 // extension
506526 extension: (
507527 LambdaTelemetry {
@@ -510,6 +530,14 @@ mod serialization_tests {
510530 } ,
511531 r#"{"time":"2023-11-28T12:00:09Z","type":"extension","record":"hello world"}"# ,
512532 ) ,
533+ // extension (json)
534+ extension_json<bool >: (
535+ LambdaTelemetry {
536+ time: Utc . with_ymd_and_hms( 2023 , 11 , 28 , 12 , 0 , 9 ) . unwrap( ) ,
537+ record: LambdaTelemetryRecord :: Extension ( true ) ,
538+ } ,
539+ r#"{"time":"2023-11-28T12:00:09Z","type":"extension","record":true}"# ,
540+ ) ,
513541 //platform.Start
514542 platform_start: (
515543 LambdaTelemetry {
0 commit comments