use lambda_runtime::{handler_fn, Context, Error};
use log::LevelFilter;
use serde::{Deserialize, Serialize};
use simple_logger::SimpleLogger;
#[derive(Deserialize)]
struct Request {
command: String,
}
#[derive(Serialize)]
struct Response {
req_id: String,
msg: String,
}
struct SharedClient {
name: &'static str,
}
impl SharedClient {
fn new(name: &'static str) -> Self {
Self { name }
}
fn response(&self, req_id: String, command: String) -> Response {
Response {
req_id,
msg: format!("Command {} executed by {}.", command, self.name),
}
}
}
#[tokio::main]
async fn main() -> Result<(), Error> {
SimpleLogger::new().with_level(LevelFilter::Info).init().unwrap();
let client = SharedClient::new("Shared Client 1 (perhaps a database)");
let client_ref = &client;
lambda_runtime::run(handler_fn(move |event: Request, ctx: Context| async move {
let command = event.command;
Ok::<Response, Error>(client_ref.response(ctx.request_id, command))
}))
.await?;
Ok(())
}