Skip to content

Commit f869f05

Browse files
committed
state always need to implement Clone
Fix #2821
1 parent 9feb526 commit f869f05

File tree

1 file changed

+3
-29
lines changed

1 file changed

+3
-29
lines changed

axum/src/extract/state.rs

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use std::{
2222
/// // here you can put configuration, database connection pools, or whatever
2323
/// // state you need
2424
/// //
25-
/// // see "When states need to implement `Clone`" for more details on why we need
25+
/// // see "Why states need to implement `Clone`" for more details on why we need
2626
/// // `#[derive(Clone)]` here.
2727
/// #[derive(Clone)]
2828
/// struct AppState {}
@@ -247,14 +247,14 @@ use std::{
247247
/// }
248248
/// ```
249249
///
250-
/// # When states need to implement `Clone`
250+
/// # Why states need to implement `Clone`
251251
///
252252
/// Your top level state type must implement `Clone` to be extractable with `State`:
253253
///
254254
/// ```
255255
/// use axum::extract::State;
256256
///
257-
/// // no substates, so to extract to `State<AppState>` we must implement `Clone` for `AppState`
257+
/// // to extract to `State<AppState>` we must implement `Clone` for `AppState`
258258
/// #[derive(Clone)]
259259
/// struct AppState {}
260260
///
@@ -265,32 +265,6 @@ use std::{
265265
///
266266
/// This works because of [`impl<S> FromRef<S> for S where S: Clone`][`FromRef`].
267267
///
268-
/// This is also true if you're extracting substates, unless you _never_ extract the top level
269-
/// state itself:
270-
///
271-
/// ```
272-
/// use axum::extract::{State, FromRef};
273-
///
274-
/// // we never extract `State<AppState>`, just `State<InnerState>`. So `AppState` doesn't need to
275-
/// // implement `Clone`
276-
/// struct AppState {
277-
/// inner: InnerState,
278-
/// }
279-
///
280-
/// #[derive(Clone)]
281-
/// struct InnerState {}
282-
///
283-
/// impl FromRef<AppState> for InnerState {
284-
/// fn from_ref(app_state: &AppState) -> InnerState {
285-
/// app_state.inner.clone()
286-
/// }
287-
/// }
288-
///
289-
/// async fn api_users(State(inner): State<InnerState>) {
290-
/// // ...
291-
/// }
292-
/// ```
293-
///
294268
/// In general however we recommend you implement `Clone` for all your state types to avoid
295269
/// potential type errors.
296270
///

0 commit comments

Comments
 (0)