Skip to content

Commit 5432879

Browse files
authored
Merge pull request #1 from rholshausen/master
update to Rust 2021 edition + switch to using the tracing crate
2 parents 6cafea1 + 71954b4 commit 5432879

File tree

6 files changed

+73
-53
lines changed

6 files changed

+73
-53
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11

22

3+
# 0.3.0 - update to Rust 2021 edition + switch to using the tracing crate
4+
5+
* 0b9c91d - chore: switch to using the tracing crate (Ronald Holshausen, Wed Jun 14 10:19:49 2023 +1000)
6+
* e5b7dcf - chore: Bump version and update to Rust 2021 edition (Ronald Holshausen, Wed Jun 14 10:05:08 2023 +1000)
7+
* 6cafea1 - bump version to 0.2.3 (Ronald Holshausen, Mon Jan 4 11:20:40 2021 +1100)
8+
39
# 0.2.2 - Update crates to latest
410

511
* 3d3cfb1 - chore: upgrade crates to latest (including hyper to 0.14) (Ronald Holshausen, Mon Jan 4 11:16:04 2021 +1100)

Cargo.toml

+12-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "webmachine-rust"
3-
version = "0.2.3"
3+
version = "0.3.0"
44
authors = ["Ronald Holshausen <uglyog@gmail.com>"]
55
description = "Port of the Ruby Webmachine library to Rust"
66
documentation = "http://www.pact.io/reference/rust/webmachine-rust-0.1.0/webmachine_rust/"
@@ -9,20 +9,20 @@ repository = "https://github.com/uglyog/webmachine-rust"
99
readme = "README.md"
1010
keywords = ["webmachine"]
1111
license = "MIT"
12-
edition = "2018"
12+
edition = "2021"
1313

1414
[dependencies]
15-
log = "0.4.8"
16-
maplit = "1.0.1"
17-
itertools = "0.10.0"
15+
chrono = "0.4.26"
16+
futures = "0.3.28"
17+
hex = "0.4.3"
18+
http = "0.2.9"
19+
hyper = { version = "0.14.26", features = ["full"] }
20+
itertools = "0.10.5"
1821
lazy_static = "1.4.0"
19-
chrono = "0.4.15"
20-
serde = "1.0.98"
21-
serde_json = "1.0.40"
22-
http = "0.2.1"
23-
hex = "0.4.2"
24-
hyper = { version = "0.14", features = ["full"] }
25-
futures = "0.3.5"
22+
maplit = "1.0.2"
23+
serde = "1.0.163"
24+
serde_json = "1.0.96"
25+
tracing = "0.1.37"
2626

2727
[dev-dependencies]
2828
expectest = "0.12.0"

src/context.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
//! The `context` module encapsulates the context of the environment that the webmachine is
22
//! executing in. Basically wraps the request and response.
33
4-
use std::collections::{HashMap, BTreeMap};
5-
use crate::headers::HeaderValue;
4+
use std::collections::{BTreeMap, HashMap};
5+
66
use chrono::{DateTime, FixedOffset};
7+
use maplit::hashmap;
78
use itertools::Itertools;
89

10+
use crate::headers::HeaderValue;
11+
912
/// Request that the state machine is executing against
1013
#[derive(Debug, Clone, PartialEq)]
1114
pub struct WebmachineRequest {
@@ -263,10 +266,12 @@ impl Default for WebmachineContext {
263266

264267
#[cfg(test)]
265268
mod tests {
266-
use super::*;
267-
use crate::headers::*;
268269
use expectest::prelude::*;
269270

271+
use crate::headers::*;
272+
273+
use super::*;
274+
270275
#[test]
271276
fn request_does_not_have_header_test() {
272277
let request = WebmachineRequest {

src/headers.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
//! The `headers` deals with parsing and formatting request and response headers
22
33
use std::collections::HashMap;
4-
use std::str::Chars;
5-
use std::iter::Peekable;
64
use std::hash::{Hash, Hasher};
5+
use std::iter::Peekable;
6+
use std::str::Chars;
7+
78
use itertools::Itertools;
89

910
const SEPERATORS: [char; 10] = ['(', ')', '<', '>', '@', ',', ';', '=', '{', '}'];
@@ -231,10 +232,12 @@ macro_rules! h {
231232

232233
#[cfg(test)]
233234
mod tests {
234-
use super::*;
235-
use expectest::prelude::*;
235+
use expectest::prelude::*;
236+
use maplit::hashmap;
236237

237-
#[test]
238+
use super::*;
239+
240+
#[test]
238241
fn parse_header_value_test() {
239242
expect!(HeaderValue::parse_string("")).to(be_equal_to("".to_string()));
240243
expect!(HeaderValue::parse_string("A B")).to(be_equal_to("A B".to_string()));

src/lib.rs

+17-22
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,6 @@ The WebmachineDispatcher implementes the Hyper Service trait, so you can pass it
4343
Note: This example uses the maplit crate to provide the `btreemap` macro and the log crate for the logging macros.
4444
4545
```no_run
46-
# #[macro_use] extern crate log;
47-
# #[macro_use] extern crate maplit;
48-
# extern crate hyper;
49-
# extern crate webmachine_rust;
50-
# extern crate serde_json;
5146
use hyper::server::Server;
5247
use webmachine_rust::*;
5348
use webmachine_rust::context::*;
@@ -57,6 +52,8 @@ Note: This example uses the maplit crate to provide the `btreemap` macro and the
5752
use std::net::SocketAddr;
5853
use hyper::service::make_service_fn;
5954
use std::convert::Infallible;
55+
use maplit::btreemap;
56+
use tracing::error;
6057
6158
# fn main() {}
6259
// setup the dispatcher, which maps paths to resources. The requirement of make_service_fn is
@@ -109,29 +106,27 @@ For an example of a project using this crate, have a look at the [Pact Mock Serv
109106

110107
#![warn(missing_docs)]
111108

112-
#[macro_use] extern crate log;
113-
#[macro_use] extern crate maplit;
114-
extern crate itertools;
115-
#[macro_use] extern crate lazy_static;
116-
extern crate chrono;
117-
extern crate http;
118-
119109
use std::collections::{BTreeMap, HashMap};
120-
use std::sync::Mutex;
110+
use std::future::Future;
111+
use std::ops::Deref;
112+
use std::pin::Pin;
121113
use std::sync::Arc;
122-
use itertools::Itertools;
114+
use std::sync::Mutex;
115+
use std::task::{Context, Poll};
116+
123117
use chrono::{DateTime, FixedOffset, Utc};
124-
use context::{WebmachineContext, WebmachineResponse, WebmachineRequest};
125-
use headers::HeaderValue;
118+
use futures::TryStreamExt;
126119
use http::{Request, Response};
127-
use hyper::service::Service;
128-
use std::task::{Context, Poll};
129-
use std::pin::Pin;
130-
use std::future::Future;
131120
use http::request::Parts;
132-
use futures::TryStreamExt;
133121
use hyper::Body;
134-
use std::ops::Deref;
122+
use hyper::service::Service;
123+
use itertools::Itertools;
124+
use lazy_static::lazy_static;
125+
use maplit::hashmap;
126+
use tracing::{debug, error, trace};
127+
128+
use context::{WebmachineContext, WebmachineRequest, WebmachineResponse};
129+
use headers::HeaderValue;
135130

136131
#[macro_use] pub mod headers;
137132
pub mod context;

src/tests.rs

+21-10
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1+
use std::collections::HashMap;
2+
3+
use chrono::*;
4+
use expectest::prelude::*;
5+
use maplit::btreemap;
6+
17
use super::*;
2-
use super::sanitise_path;
38
use super::{
49
execute_state_machine,
5-
update_paths_for_resource,
6-
parse_header_values,
710
finalise_response,
811
join_paths,
12+
parse_header_values,
13+
update_paths_for_resource,
914
};
1015
use super::context::*;
1116
use super::headers::*;
12-
use expectest::prelude::*;
13-
use std::collections::HashMap;
14-
use chrono::*;
17+
use super::sanitise_path;
1518

1619
fn resource(path: &str) -> WebmachineRequest {
1720
WebmachineRequest {
@@ -713,7 +716,8 @@ fn execute_state_machine_returns_412_if_the_resource_etag_does_not_match_if_matc
713716

714717
#[test]
715718
fn execute_state_machine_returns_412_if_the_resource_last_modified_gt_unmodified_since() {
716-
let datetime = Local::now().with_timezone(&FixedOffset::east(10 * 3600));
719+
let offset = FixedOffset::east_opt(10 * 3600).expect("FixedOffset::east out of bounds");
720+
let datetime = Local::now().with_timezone(&offset);
717721
let header_datetime = datetime.clone() - Duration::minutes(5);
718722
let mut context = WebmachineContext {
719723
request: WebmachineRequest {
@@ -726,7 +730,10 @@ fn execute_state_machine_returns_412_if_the_resource_last_modified_gt_unmodified
726730
};
727731
let resource = WebmachineResource {
728732
resource_exists: callback(&|_, _| true),
729-
last_modified: callback(&|_, _| Some(Local::now().with_timezone(&FixedOffset::east(10 * 3600)))),
733+
last_modified: callback(&|_, _| {
734+
let fixed_offset = FixedOffset::east_opt(10 * 3600).expect("FixedOffset::east out of bounds");
735+
Some(Local::now().with_timezone(&fixed_offset))
736+
}),
730737
..WebmachineResource::default()
731738
};
732739

@@ -821,7 +828,8 @@ fn execute_state_machine_returns_304_if_resource_etag_in_if_non_match_and_is_a_h
821828

822829
#[test]
823830
fn execute_state_machine_returns_304_if_the_resource_last_modified_gt_modified_since() {
824-
let datetime = Local::now().with_timezone(&FixedOffset::east(10 * 3600)) - Duration::minutes(15);
831+
let offset = FixedOffset::east_opt(10 * 3600).expect("FixedOffset::east out of bounds");
832+
let datetime = Local::now().with_timezone(&offset) - Duration::minutes(15);
825833
let header_datetime = datetime + Duration::minutes(5);
826834
let mut context = WebmachineContext {
827835
request: WebmachineRequest {
@@ -834,7 +842,10 @@ fn execute_state_machine_returns_304_if_the_resource_last_modified_gt_modified_s
834842
};
835843
let resource = WebmachineResource {
836844
resource_exists: callback(&|_, _| true),
837-
last_modified: callback(&|_, _| Some(Local::now().with_timezone(&FixedOffset::east(10 * 3600)) - Duration::minutes(15))),
845+
last_modified: callback(&|_, _| {
846+
let offset = FixedOffset::east_opt(10 * 3600).expect("FixedOffset::east out of bounds");
847+
Some(Local::now().with_timezone(&offset) - Duration::minutes(15))
848+
}),
838849
..WebmachineResource::default()
839850
};
840851
execute_state_machine(&mut context, &resource);

0 commit comments

Comments
 (0)