Skip to content

Commit 528fe8c

Browse files
authored
Merge branch 'main' into param-error
2 parents a125628 + 0fa330f commit 528fe8c

File tree

5 files changed

+41
-3
lines changed

5 files changed

+41
-3
lines changed

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ rustdoc-args = ["--cfg", "feature=\"docs\""]
2626
[features]
2727
default = ["h1-server", "logger", "sessions"]
2828
h1-server = ["async-h1"]
29-
logger = []
29+
logger = ["femme"]
3030
docs = ["unstable"]
3131
sessions = ["async-session"]
3232
unstable = []
@@ -39,8 +39,9 @@ async-session = { version = "2.0.0", optional = true }
3939
async-sse = "4.0.0"
4040
async-std = { version = "1.6.0", features = ["unstable"] }
4141
async-trait = "0.1.36"
42-
femme = "2.0.1"
42+
femme = { version = "2.0.1", optional = true }
4343
futures-util = "0.3.5"
44+
log = { version = "0.4.8", features = ["std"] }
4445
http-types = "2.4.0"
4546
kv-log-macro = "1.0.4"
4647
pin-project-lite = "0.1.7"

src/endpoint.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,10 @@ where
118118
Ok(next.run(req).await)
119119
}
120120
}
121+
122+
#[async_trait]
123+
impl<State: Clone + Send + Sync + 'static> Endpoint<State> for Box<dyn Endpoint<State>> {
124+
async fn call(&self, request: Request<State>) -> crate::Result {
125+
self.as_ref().call(request).await
126+
}
127+
}

src/log/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ pub use kv_log_macro::{max_level, Level};
2121

2222
mod middleware;
2323

24+
#[cfg(feature = "logger")]
2425
pub use femme::LevelFilter;
26+
2527
pub use middleware::LogMiddleware;
2628

2729
/// Start logging.

src/route.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,12 @@ impl<'a, State: Clone + Send + Sync + 'static> Route<'a, State> {
104104
State: Clone + Send + Sync + 'static,
105105
InnerState: Clone + Send + Sync + 'static,
106106
{
107+
let prefix = self.prefix;
108+
107109
self.prefix = true;
108110
self.all(service);
109-
self.prefix = false;
111+
self.prefix = prefix;
112+
110113
self
111114
}
112115

tests/endpoint.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
use tide::http::{Method, Request, Url};
2+
use tide::Response;
3+
4+
#[async_std::test]
5+
async fn should_accept_boxed_endpoints() {
6+
fn endpoint() -> Box<dyn tide::Endpoint<()>> {
7+
Box::new(|_| async { Ok("hello world") })
8+
}
9+
10+
let mut app = tide::Server::new();
11+
app.at("/").get(endpoint());
12+
13+
let mut response: Response = app
14+
.respond(Request::new(
15+
Method::Get,
16+
Url::parse("http://example.com/").unwrap(),
17+
))
18+
.await
19+
.unwrap();
20+
21+
assert_eq!(
22+
response.take_body().into_string().await.unwrap(),
23+
"hello world"
24+
);
25+
}

0 commit comments

Comments
 (0)