Skip to content

Commit 82e990c

Browse files
authored
Core revamp part 2 (#252)
Core revamp part 2
2 parents 1a93fc2 + f354835 commit 82e990c

File tree

12 files changed

+179
-39
lines changed

12 files changed

+179
-39
lines changed

Cargo.toml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,10 @@ http-service = "0.2.0"
3030
serde = "1.0.91"
3131
serde_derive = "1.0.91"
3232
serde_urlencoded = "0.5.5"
33-
slog = "2.4.1"
34-
slog-async = "2.3.0"
35-
slog-term = "2.4.0"
3633
tide-cookies = { path = "./tide-cookies", optional = true }
3734
tide-core = { path = "./tide-core" }
35+
tide-headers = { path = "./tide-headers" }
36+
tide-log = { path = "./tide-log" }
3837

3938
[dependencies.multipart]
4039
default-features = false
@@ -52,13 +51,19 @@ mime = "0.3.13"
5251
mime_guess = "2.0.0-alpha.6"
5352
percent-encoding = "1.0.1"
5453
serde = { version = "1.0.91", features = ["derive"] }
54+
tide-log = { path = "./tide-log" }
55+
env_logger = "0.6.1"
56+
log4rs = "0.8.3"
57+
log = "0.4.6"
5558

5659
[workspace]
5760
members = [
5861
"tide-compression",
5962
"tide-cookies",
6063
"tide-core",
64+
"tide-headers",
6165
"tide-log",
66+
"tide-slog",
6267
]
6368

6469
[patch.crates-io]

examples/hello_envlog.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#![feature(async_await)]
2+
fn main() {
3+
env_logger::from_env(env_logger::Env::default().default_filter_or("info")).init();
4+
let mut app = tide::App::new();
5+
app.middleware(tide::middleware::RequestLogger::new());
6+
app.at("/").get(async move |_| "Hello, world!");
7+
app.run("127.0.0.1:8000").unwrap();
8+
}

examples/hello_logrs.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#![feature(async_await)]
2+
fn main() {
3+
use log::LevelFilter;
4+
use log4rs::append::console::ConsoleAppender;
5+
use log4rs::config::{Appender, Config, Root};
6+
7+
let stdout = ConsoleAppender::builder().build();
8+
let config = Config::builder()
9+
.appender(Appender::builder().build("stdout", Box::new(stdout)))
10+
.build(Root::builder().appender("stdout").build(LevelFilter::Info))
11+
.unwrap();
12+
let _handle = log4rs::init_config(config).unwrap();
13+
14+
let mut app = tide::App::new();
15+
app.middleware(tide::middleware::RequestLogger::new());
16+
app.at("/").get(async move |_| "Hello, world!");
17+
app.run("127.0.0.1:8000").unwrap();
18+
}

src/middleware/mod.rs renamed to src/middleware.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
mod default_headers;
2-
mod logger;
1+
// Core
2+
pub use tide_core::middleware::{Middleware, Next};
3+
4+
// Exports from tide repo.
5+
pub use tide_headers::DefaultHeaders;
6+
pub use tide_log::RequestLogger;
37

4-
pub use self::{default_headers::DefaultHeaders, logger::RootLogger};
58
#[cfg(feature = "cookies")]
69
pub use tide_cookies::CookiesMiddleware;
7-
pub use tide_core::middleware::{Middleware, Next};

tide-compression/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ features = ["stream", "gzip", "zlib", "brotli", "zstd"]
2727
version = "0.1.0-alpha.1"
2828

2929
[dev-dependencies]
30+
tide = { path = "../" }
3031
http-service-mock = "0.2.0"

tide-cookies/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ edition = "2018"
55
authors = [
66
"Tide Developers",
77
]
8-
description = "Cookie management for Tide web framework"
9-
documentation = "https://docs.rs/tide-core"
8+
description = "Cookie middleware and extensions for Tide"
9+
documentation = "https://docs.rs/tide-cookies"
1010
license = "MIT OR Apache-2.0"
1111
repository = "https://github.com/rustasync/tide"
1212

@@ -18,4 +18,5 @@ http-service = "0.2.0"
1818
tide-core = { path = "../tide-core" }
1919

2020
[dev-dependencies]
21+
tide = { path = "../" }
2122
http-service-mock = "0.2.0"

tide-headers/Cargo.toml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
[package]
2+
authors = [
3+
"Tide Developers"
4+
]
5+
description = "Header related middleware for Tide"
6+
documentation = "https://docs.rs/tide-headers"
7+
keywords = ["tide", "web", "async", "middleware", "headers"]
8+
categories = [
9+
"network-programming",
10+
"web-programming::http-server",
11+
]
12+
edition = "2018"
13+
license = "MIT OR Apache-2.0"
14+
name = "tide-headers"
15+
readme = "README.md"
16+
repository = "https://github.com/rustasync/tide"
17+
version = "0.1.0"
18+
19+
[dependencies]
20+
tide-core = { path = "../tide-core" }
21+
futures-preview = "0.3.0-alpha.16"
22+
http = "0.1"
23+
log = "0.4.6"
24+
25+
[dev-dependencies]
26+
tide = { path = "../" }

src/middleware/default_headers.rs renamed to tide-headers/src/lib.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
1+
//! Crate that provides helpers, and/or middlewares for tide
2+
//! related to http headers.
3+
#![feature(async_await)]
4+
#![warn(
5+
nonstandard_style,
6+
rust_2018_idioms,
7+
future_incompatible,
8+
missing_debug_implementations
9+
)]
10+
111
use futures::future::BoxFuture;
212
use futures::prelude::*;
13+
use log::trace;
314

415
use http::{
516
header::{HeaderValue, IntoHeaderName},
617
HeaderMap, HttpTryFrom,
718
};
819

9-
use crate::{
20+
use tide_core::{
1021
middleware::{Middleware, Next},
1122
Context, Response,
1223
};
@@ -20,10 +31,9 @@ pub struct DefaultHeaders {
2031
impl DefaultHeaders {
2132
/// Construct a new instance with an empty list of headers.
2233
pub fn new() -> DefaultHeaders {
23-
DefaultHeaders::default()
34+
Self::default()
2435
}
2536

26-
#[inline]
2737
/// Add a header to the default header list.
2838
pub fn header<K, V>(mut self, key: K, value: V) -> Self
2939
where
@@ -35,7 +45,6 @@ impl DefaultHeaders {
3545
.expect("Cannot create default header");
3646

3747
self.headers.append(key, value);
38-
3948
self
4049
}
4150
}
@@ -44,9 +53,9 @@ impl<Data: Send + Sync + 'static> Middleware<Data> for DefaultHeaders {
4453
fn handle<'a>(&'a self, cx: Context<Data>, next: Next<'a, Data>) -> BoxFuture<'a, Response> {
4554
FutureExt::boxed(async move {
4655
let mut res = next.run(cx).await;
47-
4856
let headers = res.headers_mut();
4957
for (key, value) in self.headers.iter() {
58+
trace!("add default: {} {:?}", &key, &value);
5059
headers.entry(key).unwrap().or_insert_with(|| value.clone());
5160
}
5261
res

tide-log/Cargo.toml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
authors = [
33
"Tide Developers"
44
]
5-
description = "Tide middleware for logging"
5+
description = "Logging middleware for Tide"
66
documentation = "https://docs.rs/tide-log"
77
keywords = ["tide", "web", "async", "middleware", "logging"]
88
categories = [
@@ -18,7 +18,10 @@ repository = "https://github.com/rustasync/tide"
1818
version = "0.1.0"
1919

2020
[dependencies]
21-
tide = { path = "../" }
21+
tide-core = { path = "../tide-core" }
2222
futures-preview = "0.3.0-alpha.16"
2323
http = "0.1"
24-
log = "0.4.6"
24+
log = "0.4.6"
25+
26+
[dev-dependencies]
27+
tide = { path = "../" }

tide-log/src/lib.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
//! Crate that provides helpers and/or middlewares for tide
2+
//! related to logging.
3+
//!
14
#![feature(async_await)]
25
#![warn(
36
nonstandard_style,
@@ -9,7 +12,8 @@
912
use futures::future::BoxFuture;
1013
use futures::prelude::*;
1114
use log::{info, trace};
12-
use tide::{
15+
16+
use tide_core::{
1317
middleware::{Middleware, Next},
1418
Context, Response,
1519
};
@@ -24,25 +28,38 @@ use tide::{
2428
/// app.middleware(tide_log::RequestLogger::new());
2529
/// ```
2630
#[derive(Debug, Clone, Default)]
27-
pub struct RequestLogger;
31+
pub struct RequestLogger {
32+
target: String,
33+
}
2834

2935
impl RequestLogger {
36+
/// Create a new instance of logger with default target as
37+
/// "requests"
3038
pub fn new() -> Self {
31-
Self::default()
39+
Self {
40+
target: "requests".to_owned(),
41+
}
42+
}
43+
44+
/// Create a new instance of logger with supplied `target` for
45+
/// logging.
46+
pub fn with_target(target: String) -> Self {
47+
Self { target }
3248
}
3349

3450
async fn log_basic<'a, Data: Send + Sync + 'static>(
3551
&'a self,
3652
ctx: Context<Data>,
3753
next: Next<'a, Data>,
38-
) -> tide::Response {
54+
) -> Response {
3955
let path = ctx.uri().path().to_owned();
4056
let method = ctx.method().as_str().to_owned();
41-
trace!("IN => {} {}", method, path);
57+
trace!(target: &self.target, "IN => {} {}", method, path);
4258
let start = std::time::Instant::now();
4359
let res = next.run(ctx).await;
4460
let status = res.status();
4561
info!(
62+
target: &self.target,
4663
"{} {} {} {}ms",
4764
method,
4865
path,

0 commit comments

Comments
 (0)