Skip to content

Commit 684edc0

Browse files
authored
Merge pull request #10195 from Turbo87/deref-derive
Derive `Deref` for more structs
2 parents 608c02a + ce87a3c commit 684edc0

File tree

5 files changed

+10
-47
lines changed

5 files changed

+10
-47
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ chrono = { version = "=0.4.39", default-features = false, features = ["serde"] }
7171
clap = { version = "=4.5.23", features = ["derive", "env", "unicode", "wrap_help"] }
7272
cookie = { version = "=0.18.1", features = ["secure"] }
7373
deadpool-diesel = { version = "=0.6.1", features = ["postgres", "tracing"] }
74-
derive_more = { version = "=1.0.0", features = ["deref"] }
74+
derive_more = { version = "=1.0.0", features = ["deref", "deref_mut"] }
7575
dialoguer = "=0.11.0"
7676
diesel = { version = "=2.2.6", features = ["postgres", "serde_json", "chrono", "numeric"] }
7777
diesel-async = { version = "=0.5.2", features = ["async-connection-wrapper", "deadpool", "postgres"] }

src/app.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
33
use crate::config;
44
use crate::db::{connection_url, make_manager_config, ConnectionConfig};
5-
use std::ops::Deref;
65
use std::sync::Arc;
76

87
use crate::email::Emails;
@@ -12,6 +11,7 @@ use crate::storage::Storage;
1211
use axum::extract::{FromRef, FromRequestParts, State};
1312
use crates_io_github::GitHubClient;
1413
use deadpool_diesel::Runtime;
14+
use derive_more::Deref;
1515
use diesel_async::pooled_connection::deadpool::Pool as DeadpoolPool;
1616
use diesel_async::pooled_connection::AsyncDieselConnectionManager;
1717
use diesel_async::AsyncPgConnection;
@@ -206,19 +206,10 @@ impl App {
206206
}
207207
}
208208

209-
#[derive(Clone, FromRequestParts)]
209+
#[derive(Clone, FromRequestParts, Deref)]
210210
#[from_request(via(State))]
211211
pub struct AppState(pub Arc<App>);
212212

213-
// deref so you can still access the inner fields easily
214-
impl Deref for AppState {
215-
type Target = App;
216-
217-
fn deref(&self) -> &Self::Target {
218-
&self.0
219-
}
220-
}
221-
222213
impl FromRef<AppState> for cookie::Key {
223214
fn from_ref(app: &AppState) -> Self {
224215
app.session_key().clone()

src/middleware/session.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ use axum_extra::extract::SignedCookieJar;
66
use base64::{engine::general_purpose, Engine};
77
use cookie::time::Duration;
88
use cookie::{Cookie, SameSite};
9+
use derive_more::Deref;
910
use parking_lot::RwLock;
1011
use std::collections::HashMap;
11-
use std::ops::Deref;
1212
use std::sync::Arc;
1313

1414
static COOKIE_NAME: &str = "cargo_session";
1515
static MAX_AGE_DAYS: i64 = 90;
1616

17-
#[derive(Clone, FromRequestParts)]
17+
#[derive(Clone, FromRequestParts, Deref)]
1818
#[from_request(via(Extension))]
1919
pub struct SessionExtension(Arc<RwLock<Session>>);
2020

@@ -41,14 +41,6 @@ impl SessionExtension {
4141
}
4242
}
4343

44-
impl Deref for SessionExtension {
45-
type Target = RwLock<Session>;
46-
47-
fn deref(&self) -> &Self::Target {
48-
self.0.as_ref()
49-
}
50-
}
51-
5244
pub async fn attach_session(jar: SignedCookieJar, mut req: Request, next: Next) -> Response {
5345
// Decode session cookie
5446
let data = jar.get(COOKIE_NAME).map(decode).unwrap_or_default();

src/tests/util/response.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,21 @@ use bytes::Bytes;
33
use googletest::prelude::*;
44
use serde_json::Value;
55
use std::marker::PhantomData;
6-
use std::ops::Deref;
76
use std::str::from_utf8;
87

98
use crate::rate_limiter::LimitedAction;
9+
use derive_more::Deref;
1010
use http::{header, StatusCode};
1111

1212
/// A type providing helper methods for working with responses
13+
#[derive(Deref)]
1314
#[must_use]
1415
pub struct Response<T> {
16+
#[deref]
1517
response: hyper::Response<Bytes>,
1618
return_type: PhantomData<T>,
1719
}
1820

19-
impl Deref for Response<()> {
20-
type Target = hyper::Response<Bytes>;
21-
22-
fn deref(&self) -> &Self::Target {
23-
&self.response
24-
}
25-
}
26-
2721
impl<T> Response<T>
2822
where
2923
for<'de> T: serde::Deserialize<'de>,

src/util/bytes_request.rs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,14 @@ use axum::body::Bytes;
33
use axum::extract::{FromRequest, Request};
44
use axum::response::{IntoResponse, Response};
55
use axum::{async_trait, Extension, RequestExt};
6+
use derive_more::{Deref, DerefMut};
67
use http::StatusCode;
78
use http_body_util::{BodyExt, LengthLimitError};
89
use std::error::Error;
9-
use std::ops::{Deref, DerefMut};
1010

11-
#[derive(Debug)]
11+
#[derive(Debug, Deref, DerefMut)]
1212
pub struct BytesRequest(pub Request<Bytes>);
1313

14-
impl Deref for BytesRequest {
15-
type Target = Request<Bytes>;
16-
17-
fn deref(&self) -> &Self::Target {
18-
&self.0
19-
}
20-
}
21-
22-
impl DerefMut for BytesRequest {
23-
fn deref_mut(&mut self) -> &mut Self::Target {
24-
&mut self.0
25-
}
26-
}
27-
2814
#[async_trait]
2915
impl<S> FromRequest<S> for BytesRequest
3016
where

0 commit comments

Comments
 (0)