Skip to content

Commit 105eaf8

Browse files
Sh4rKdavidbarsky
authored andcommitted
Migrate lambda-http to Rust 2018 (#40)
1 parent 0146698 commit 105eaf8

File tree

7 files changed

+52
-69
lines changed

7 files changed

+52
-69
lines changed

lambda-http/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
name = "lambda_http"
33
version = "0.1.0"
44
authors = ["Doug Tangren"]
5+
edition = "2018"
56
description = "Rust API Gateway proxy event interfaces for AWS Lambda"
67
keywords = ["AWS", "Lambda", "APIGateway", "Rust", "API"]
78
license = "Apache-2.0"

lambda-http/examples/basic.rs

+5-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
extern crate lambda_http as http;
2-
extern crate lambda_runtime as runtime;
3-
extern crate log;
4-
extern crate simple_logger;
5-
6-
use http::{lambda, Body, IntoResponse, Request, RequestExt, Response};
7-
use runtime::{error::HandlerError, Context};
8-
9-
use log::error;
101
use std::error::Error;
112

3+
use lambda_http::{lambda, IntoResponse, Request, RequestExt, Response};
4+
use lambda_runtime::{error::HandlerError, Context};
5+
use log::{self, error};
6+
use simple_logger;
7+
128
fn main() -> Result<(), Box<dyn Error>> {
139
simple_logger::init_with_level(log::Level::Debug).unwrap();
1410
lambda!(my_handler);

lambda-http/src/ext.rs

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
//! API Gateway extension methods for `http::Request` types
22
3+
use failure::Fail;
34
use http::{header::CONTENT_TYPE, Request as HttpRequest};
45
use serde::{de::value::Error as SerdeError, Deserialize};
56
use serde_json;
67
use serde_urlencoded;
78

8-
use request::RequestContext;
9-
use strmap::StrMap;
9+
use crate::request::RequestContext;
10+
use crate::strmap::StrMap;
1011

1112
/// API gateway pre-parsed http query string parameters
1213
pub(crate) struct QueryStringParameters(pub(crate) StrMap);
@@ -153,18 +154,20 @@ impl RequestExt for HttpRequest<super::Body> {
153154
#[cfg(test)]
154155
mod tests {
155156
use http::{HeaderMap, Request as HttpRequest};
157+
use serde_derive::Deserialize;
156158
use std::collections::HashMap;
157-
use GatewayRequest;
158-
use RequestExt;
159-
use StrMap;
159+
160+
use crate::GatewayRequest;
161+
use crate::RequestExt;
162+
use crate::StrMap;
160163

161164
#[test]
162165
fn requests_have_query_string_ext() {
163166
let mut headers = HeaderMap::new();
164167
headers.insert("Host", "www.rust-lang.org".parse().unwrap());
165168
let mut query = HashMap::new();
166169
query.insert("foo".to_owned(), "bar".to_owned());
167-
let gwr: GatewayRequest = GatewayRequest {
170+
let gwr: GatewayRequest<'_> = GatewayRequest {
168171
path: "/foo".into(),
169172
headers,
170173
query_string_parameters: StrMap(query.clone().into()),
@@ -184,7 +187,7 @@ mod tests {
184187
foo: String,
185188
baz: usize,
186189
}
187-
let gwr: GatewayRequest = GatewayRequest {
190+
let gwr: GatewayRequest<'_> = GatewayRequest {
188191
path: "/foo".into(),
189192
headers,
190193
body: Some("foo=bar&baz=2".into()),
@@ -206,7 +209,7 @@ mod tests {
206209
let mut headers = HeaderMap::new();
207210
headers.insert("Host", "www.rust-lang.org".parse().unwrap());
208211
headers.insert("Content-Type", "application/x-www-form-urlencoded".parse().unwrap());
209-
let gwr: GatewayRequest = GatewayRequest {
212+
let gwr: GatewayRequest<'_> = GatewayRequest {
210213
path: "/foo".into(),
211214
headers,
212215
body: Some("foo=bar&baz=2".into()),
@@ -230,7 +233,7 @@ mod tests {
230233
foo: String,
231234
baz: usize,
232235
}
233-
let gwr: GatewayRequest = GatewayRequest {
236+
let gwr: GatewayRequest<'_> = GatewayRequest {
234237
path: "/foo".into(),
235238
headers,
236239
body: Some(r#"{"foo":"bar", "baz": 2}"#.into()),

lambda-http/src/lib.rs

+20-38
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,28 @@
55
//! # Example
66
//!
77
//! ```rust,no_run
8-
//! #[macro_use] extern crate lambda_http;
9-
//! extern crate lambda_runtime as lambda;
10-
//!
11-
//! use lambda::{Context, HandlerError};
12-
//! use lambda_http::{Request, IntoResponse, RequestExt};
8+
//! use lambda_http::{lambda, IntoResponse, Request, RequestExt};
9+
//! use lambda_runtime::{Context, HandlerError};
1310
//!
1411
//! fn main() {
15-
//! lambda!(handler)
12+
//! lambda!(handler)
1613
//! }
1714
//!
1815
//! fn handler(
19-
//! request: Request,
20-
//! ctx: Context
16+
//! request: Request,
17+
//! _ctx: Context
2118
//! ) -> Result<impl IntoResponse, HandlerError> {
22-
//! Ok(
23-
//! format!(
19+
//! Ok(format!(
2420
//! "hello {}",
25-
//! request.query_string_parameters()
26-
//! .get("name")
27-
//! .unwrap_or_else(|| "stranger")
28-
//! )
29-
//! )
21+
//! request
22+
//! .query_string_parameters()
23+
//! .get("name")
24+
//! .unwrap_or_else(|| "stranger")
25+
//! ))
3026
//! }
3127
//! ```
32-
extern crate base64;
33-
extern crate failure;
34-
#[macro_use]
35-
extern crate failure_derive;
36-
/// re-export for convenient access in consumer crates
37-
pub extern crate http;
38-
extern crate lambda_runtime;
39-
extern crate serde;
40-
#[macro_use]
41-
extern crate serde_derive;
42-
extern crate serde_json;
43-
extern crate serde_urlencoded;
44-
extern crate tokio;
4528
46-
use http::Request as HttpRequest;
47-
pub use http::Response;
29+
pub use http::{self, Response};
4830
use lambda_runtime::{self as lambda, error::HandlerError, Context};
4931
use tokio::runtime::Runtime as TokioRuntime;
5032

@@ -54,15 +36,15 @@ pub mod request;
5436
mod response;
5537
mod strmap;
5638

57-
pub use body::Body;
58-
pub use ext::RequestExt;
59-
use request::GatewayRequest;
60-
use response::GatewayResponse;
61-
pub use response::IntoResponse;
62-
pub use strmap::StrMap;
39+
pub use crate::body::Body;
40+
pub use crate::ext::RequestExt;
41+
use crate::request::GatewayRequest;
42+
use crate::response::GatewayResponse;
43+
pub use crate::response::IntoResponse;
44+
pub use crate::strmap::StrMap;
6345

6446
/// Type alias for `http::Request`s with a fixed `lambda_http::Body` body
65-
pub type Request = HttpRequest<Body>;
47+
pub type Request = http::Request<Body>;
6648

6749
/// Functions acting as API Gateway handlers must conform to this type.
6850
pub trait Handler<R> {
@@ -94,7 +76,7 @@ where
9476
// handler requires a mutable ref
9577
let mut func = f;
9678
lambda::start(
97-
|req: GatewayRequest, ctx: Context| {
79+
|req: GatewayRequest<'_>, ctx: Context| {
9880
func.run(req.into(), ctx)
9981
.map(|resp| GatewayResponse::from(resp.into_response()))
10082
},

lambda-http/src/request.rs

+10-9
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ use serde::{
1212
de::{Error as DeError, MapAccess, Visitor},
1313
Deserialize, Deserializer,
1414
};
15+
use serde_derive::Deserialize;
1516
use serde_json::Value;
1617

17-
use body::Body;
18-
use ext::{PathParameters, QueryStringParameters, StageVariables};
19-
use strmap::StrMap;
18+
use crate::body::Body;
19+
use crate::ext::{PathParameters, QueryStringParameters, StageVariables};
20+
use crate::strmap::StrMap;
2021

2122
/// Representation of an API Gateway proxy event data
2223
#[doc(hidden)]
@@ -84,7 +85,7 @@ where
8485
impl<'de> Visitor<'de> for MethodVisitor {
8586
type Value = Method;
8687

87-
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
88+
fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
8889
write!(formatter, "a Method")
8990
}
9091

@@ -108,7 +109,7 @@ where
108109
impl<'de> Visitor<'de> for HeaderVisitor {
109110
type Value = HeaderMap<HeaderValue>;
110111

111-
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
112+
fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
112113
write!(formatter, "a HeaderMap<HeaderValue>")
113114
}
114115

@@ -117,7 +118,7 @@ where
117118
A: MapAccess<'de>,
118119
{
119120
let mut headers = http::HeaderMap::new();
120-
while let Some((key, value)) = map.next_entry::<Cow<str>, Cow<str>>()? {
121+
while let Some((key, value)) = map.next_entry::<Cow<'_, str>, Cow<'_, str>>()? {
121122
let header_name = key.parse::<http::header::HeaderName>().map_err(A::Error::custom)?;
122123
let header_value =
123124
http::header::HeaderValue::from_shared(value.into_owned().into()).map_err(A::Error::custom)?;
@@ -142,7 +143,7 @@ where
142143
}
143144

144145
impl<'a> From<GatewayRequest<'a>> for HttpRequest<Body> {
145-
fn from(value: GatewayRequest) -> Self {
146+
fn from(value: GatewayRequest<'_>) -> Self {
146147
let GatewayRequest {
147148
path,
148149
http_method,
@@ -205,7 +206,7 @@ mod tests {
205206
fn requests_convert() {
206207
let mut headers = HeaderMap::new();
207208
headers.insert("Host", "www.rust-lang.org".parse().unwrap());
208-
let gwr: GatewayRequest = GatewayRequest {
209+
let gwr: GatewayRequest<'_> = GatewayRequest {
209210
path: "/foo".into(),
210211
headers,
211212
..GatewayRequest::default()
@@ -222,7 +223,7 @@ mod tests {
222223
// from the docs
223224
// https://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-api-gateway-request
224225
let input = include_str!("../tests/data/proxy_request.json");
225-
assert!(serde_json::from_str::<GatewayRequest>(&input).is_ok())
226+
assert!(serde_json::from_str::<GatewayRequest<'_>>(&input).is_ok())
226227
}
227228

228229
#[test]

lambda-http/src/response.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ use serde::{
1111
ser::{Error as SerError, SerializeMap},
1212
Serializer,
1313
};
14+
use serde_derive::Serialize;
1415

15-
use body::Body;
16+
use crate::body::Body;
1617

1718
/// Representation of API Gateway response
1819
#[derive(Serialize, Debug)]
@@ -125,7 +126,6 @@ impl IntoResponse for serde_json::Value {
125126

126127
#[cfg(test)]
127128
mod tests {
128-
129129
use super::{Body, GatewayResponse, IntoResponse};
130130
use serde_json::{self, json};
131131

lambda-http/src/strmap.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ impl StrMap {
2525
}
2626

2727
/// Return an iterator over keys and values
28-
pub fn iter(&self) -> StrMapIter {
28+
pub fn iter(&self) -> StrMapIter<'_> {
2929
StrMapIter {
3030
data: self,
3131
keys: self.0.keys(),
@@ -70,7 +70,7 @@ impl<'de> Deserialize<'de> for StrMap {
7070
impl<'de> Visitor<'de> for StrMapVisitor {
7171
type Value = StrMap;
7272

73-
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
73+
fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
7474
write!(formatter, "a StrMap")
7575
}
7676

0 commit comments

Comments
 (0)