mirror of
https://github.com/tokio-rs/axum.git
synced 2026-09-09 00:00:12 +02:00
Annotate panicking functions with #[track_caller] (#1248)
This commit is contained in:
+5
-1
@@ -7,7 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
# Unreleased
|
# Unreleased
|
||||||
|
|
||||||
- None.
|
- **fixed:** Annotate panicking functions with `#[track_caller]` so the error
|
||||||
|
message points to where the user added the invalid router, rather than
|
||||||
|
somewhere internally in axum ([#1248])
|
||||||
|
|
||||||
|
[#1248]: https://github.com/tokio-rs/axum/pull/1248
|
||||||
|
|
||||||
# 0.5.16 (10. September, 2022)
|
# 0.5.16 (10. September, 2022)
|
||||||
|
|
||||||
|
|||||||
@@ -207,6 +207,7 @@ macro_rules! chained_service_fn {
|
|||||||
$name:ident, $method:ident
|
$name:ident, $method:ident
|
||||||
) => {
|
) => {
|
||||||
$(#[$m])+
|
$(#[$m])+
|
||||||
|
#[track_caller]
|
||||||
pub fn $name<S, ResBody>(self, svc: S) -> Self
|
pub fn $name<S, ResBody>(self, svc: S) -> Self
|
||||||
where
|
where
|
||||||
S: Service<Request<ReqBody>, Response = Response<ResBody>, Error = E>
|
S: Service<Request<ReqBody>, Response = Response<ResBody>, Error = E>
|
||||||
@@ -271,6 +272,7 @@ macro_rules! chained_handler_fn {
|
|||||||
$name:ident, $method:ident
|
$name:ident, $method:ident
|
||||||
) => {
|
) => {
|
||||||
$(#[$m])+
|
$(#[$m])+
|
||||||
|
#[track_caller]
|
||||||
pub fn $name<H, T>(self, handler: H) -> Self
|
pub fn $name<H, T>(self, handler: H) -> Self
|
||||||
where
|
where
|
||||||
H: Handler<T, B>,
|
H: Handler<T, B>,
|
||||||
@@ -585,6 +587,7 @@ where
|
|||||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||||
/// # };
|
/// # };
|
||||||
/// ```
|
/// ```
|
||||||
|
#[track_caller]
|
||||||
pub fn on<H, T>(self, filter: MethodFilter, handler: H) -> Self
|
pub fn on<H, T>(self, filter: MethodFilter, handler: H) -> Self
|
||||||
where
|
where
|
||||||
H: Handler<T, B>,
|
H: Handler<T, B>,
|
||||||
@@ -697,6 +700,7 @@ impl<ReqBody, E> MethodRouter<ReqBody, E> {
|
|||||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||||
/// # };
|
/// # };
|
||||||
/// ```
|
/// ```
|
||||||
|
#[track_caller]
|
||||||
pub fn on_service<S, ResBody>(self, filter: MethodFilter, svc: S) -> Self
|
pub fn on_service<S, ResBody>(self, filter: MethodFilter, svc: S) -> Self
|
||||||
where
|
where
|
||||||
S: Service<Request<ReqBody>, Response = Response<ResBody>, Error = E>
|
S: Service<Request<ReqBody>, Response = Response<ResBody>, Error = E>
|
||||||
@@ -809,8 +813,10 @@ impl<ReqBody, E> MethodRouter<ReqBody, E> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[doc = include_str!("../docs/method_routing/merge.md")]
|
#[doc = include_str!("../docs/method_routing/merge.md")]
|
||||||
|
#[track_caller]
|
||||||
pub fn merge(mut self, other: MethodRouter<ReqBody, E>) -> Self {
|
pub fn merge(mut self, other: MethodRouter<ReqBody, E>) -> Self {
|
||||||
// written using inner functions to generate less IR
|
// written using inner functions to generate less IR
|
||||||
|
#[track_caller]
|
||||||
fn merge_inner<T>(name: &str, first: Option<T>, second: Option<T>) -> Option<T> {
|
fn merge_inner<T>(name: &str, first: Option<T>, second: Option<T>) -> Option<T> {
|
||||||
match (first, second) {
|
match (first, second) {
|
||||||
(Some(_), Some(_)) => panic!(
|
(Some(_), Some(_)) => panic!(
|
||||||
@@ -822,6 +828,7 @@ impl<ReqBody, E> MethodRouter<ReqBody, E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
fn merge_fallback<B, E>(
|
fn merge_fallback<B, E>(
|
||||||
fallback: Fallback<B, E>,
|
fallback: Fallback<B, E>,
|
||||||
fallback_other: Fallback<B, E>,
|
fallback_other: Fallback<B, E>,
|
||||||
@@ -868,12 +875,14 @@ impl<ReqBody, E> MethodRouter<ReqBody, E> {
|
|||||||
self.layer(HandleErrorLayer::new(f))
|
self.layer(HandleErrorLayer::new(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
fn on_service_boxed_response_body<S>(mut self, filter: MethodFilter, svc: S) -> Self
|
fn on_service_boxed_response_body<S>(mut self, filter: MethodFilter, svc: S) -> Self
|
||||||
where
|
where
|
||||||
S: Service<Request<ReqBody>, Response = Response, Error = E> + Clone + Send + 'static,
|
S: Service<Request<ReqBody>, Response = Response, Error = E> + Clone + Send + 'static,
|
||||||
S::Future: Send + 'static,
|
S::Future: Send + 'static,
|
||||||
{
|
{
|
||||||
// written using an inner function to generate less IR
|
// written using an inner function to generate less IR
|
||||||
|
#[track_caller]
|
||||||
fn set_service<T>(
|
fn set_service<T>(
|
||||||
method_name: &str,
|
method_name: &str,
|
||||||
out: &mut Option<T>,
|
out: &mut Option<T>,
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[doc = include_str!("../docs/routing/route.md")]
|
#[doc = include_str!("../docs/routing/route.md")]
|
||||||
|
#[track_caller]
|
||||||
pub fn route<T>(mut self, path: &str, service: T) -> Self
|
pub fn route<T>(mut self, path: &str, service: T) -> Self
|
||||||
where
|
where
|
||||||
T: Service<Request<B>, Response = Response, Error = Infallible> + Clone + Send + 'static,
|
T: Service<Request<B>, Response = Response, Error = Infallible> + Clone + Send + 'static,
|
||||||
@@ -173,6 +174,7 @@ where
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
fn set_node(&mut self, path: &str, id: RouteId) {
|
fn set_node(&mut self, path: &str, id: RouteId) {
|
||||||
let mut node =
|
let mut node =
|
||||||
Arc::try_unwrap(Arc::clone(&self.node)).unwrap_or_else(|node| (*node).clone());
|
Arc::try_unwrap(Arc::clone(&self.node)).unwrap_or_else(|node| (*node).clone());
|
||||||
@@ -183,6 +185,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[doc = include_str!("../docs/routing/nest.md")]
|
#[doc = include_str!("../docs/routing/nest.md")]
|
||||||
|
#[track_caller]
|
||||||
pub fn nest<T>(mut self, mut path: &str, svc: T) -> Self
|
pub fn nest<T>(mut self, mut path: &str, svc: T) -> Self
|
||||||
where
|
where
|
||||||
T: Service<Request<B>, Response = Response, Error = Infallible> + Clone + Send + 'static,
|
T: Service<Request<B>, Response = Response, Error = Infallible> + Clone + Send + 'static,
|
||||||
@@ -262,6 +265,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[doc = include_str!("../docs/routing/merge.md")]
|
#[doc = include_str!("../docs/routing/merge.md")]
|
||||||
|
#[track_caller]
|
||||||
pub fn merge<R>(mut self, other: R) -> Self
|
pub fn merge<R>(mut self, other: R) -> Self
|
||||||
where
|
where
|
||||||
R: Into<Router<B>>,
|
R: Into<Router<B>>,
|
||||||
@@ -477,6 +481,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
fn panic_on_matchit_error(&self, err: matchit::InsertError) {
|
fn panic_on_matchit_error(&self, err: matchit::InsertError) {
|
||||||
if self.nested_at_root {
|
if self.nested_at_root {
|
||||||
panic!(
|
panic!(
|
||||||
|
|||||||
Reference in New Issue
Block a user