Skip to content

Commit f028ee0

Browse files
make log record type generic
1 parent 61855c2 commit f028ee0

1 file changed

Lines changed: 37 additions & 9 deletions

File tree

lambda-extension/src/telemetry.rs

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)