diff --git a/lambda-extension/src/events.rs b/lambda-extension/src/events.rs index 87fd62a4..4d27bae9 100644 --- a/lambda-extension/src/events.rs +++ b/lambda-extension/src/events.rs @@ -1,3 +1,5 @@ +use std::{rc::Rc}; + use serde::Deserialize; /// Request tracing information @@ -56,16 +58,13 @@ impl NextEvent { /// event that the Lambda Runtime is going to process pub struct LambdaEvent { /// ID assigned to this extension by the Lambda Runtime - pub extension_id: String, + pub extension_id: Rc, /// Next incoming event pub next: NextEvent, } impl LambdaEvent { - pub(crate) fn new(ex_id: &str, next: NextEvent) -> LambdaEvent { - LambdaEvent { - extension_id: ex_id.into(), - next, - } + pub(crate) fn new(extension_id: Rc, next: NextEvent) -> Self { + LambdaEvent { extension_id, next } } } diff --git a/lambda-extension/src/extension.rs b/lambda-extension/src/extension.rs index 776e2fdf..a7dc62e8 100644 --- a/lambda-extension/src/extension.rs +++ b/lambda-extension/src/extension.rs @@ -1,5 +1,6 @@ use std::{ - convert::Infallible, fmt, future::ready, future::Future, net::SocketAddr, path::PathBuf, pin::Pin, sync::Arc, + convert::Infallible, fmt, future::ready, future::Future, net::SocketAddr, path::PathBuf, pin::Pin, rc::Rc, + sync::Arc, }; use hyper::{server::conn::AddrStream, Server}; @@ -221,6 +222,7 @@ where let extension_id = register(client, self.extension_name, self.events).await?; let extension_id = extension_id.to_str()?; + let extension_id_rc = Rc::new(String::from(extension_id)); let mut ep = self.events_processor; if let Some(mut log_processor) = self.logs_processor { @@ -315,7 +317,7 @@ where let event: NextEvent = serde_json::from_slice(&body)?; let is_invoke = event.is_invoke(); - let event = LambdaEvent::new(extension_id, event); + let event = LambdaEvent::new(extension_id_rc.clone(), event); let ep = match ep.ready().await { Ok(ep) => ep,