From ca4601dab3f9000578d4736cc3317f39af515d83 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Thu, 12 Dec 2024 20:08:06 +0100 Subject: [PATCH 1/4] middleware/session: Derive `Deref for SessionExtension` --- src/middleware/session.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/middleware/session.rs b/src/middleware/session.rs index 307dc4add8b..5a8c04baa37 100644 --- a/src/middleware/session.rs +++ b/src/middleware/session.rs @@ -6,15 +6,15 @@ use axum_extra::extract::SignedCookieJar; use base64::{engine::general_purpose, Engine}; use cookie::time::Duration; use cookie::{Cookie, SameSite}; +use derive_more::Deref; use parking_lot::RwLock; use std::collections::HashMap; -use std::ops::Deref; use std::sync::Arc; static COOKIE_NAME: &str = "cargo_session"; static MAX_AGE_DAYS: i64 = 90; -#[derive(Clone, FromRequestParts)] +#[derive(Clone, FromRequestParts, Deref)] #[from_request(via(Extension))] pub struct SessionExtension(Arc>); @@ -41,14 +41,6 @@ impl SessionExtension { } } -impl Deref for SessionExtension { - type Target = RwLock; - - fn deref(&self) -> &Self::Target { - self.0.as_ref() - } -} - pub async fn attach_session(jar: SignedCookieJar, mut req: Request, next: Next) -> Response { // Decode session cookie let data = jar.get(COOKIE_NAME).map(decode).unwrap_or_default(); From a4067c4d772b1849f629656d64b76b1a14dede76 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Thu, 12 Dec 2024 20:13:40 +0100 Subject: [PATCH 2/4] app: Derive `Deref for AppState` --- src/app.rs | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/app.rs b/src/app.rs index d6f5be107cc..1809e477423 100644 --- a/src/app.rs +++ b/src/app.rs @@ -2,7 +2,6 @@ use crate::config; use crate::db::{connection_url, make_manager_config, ConnectionConfig}; -use std::ops::Deref; use std::sync::Arc; use crate::email::Emails; @@ -12,6 +11,7 @@ use crate::storage::Storage; use axum::extract::{FromRef, FromRequestParts, State}; use crates_io_github::GitHubClient; use deadpool_diesel::Runtime; +use derive_more::Deref; use diesel_async::pooled_connection::deadpool::Pool as DeadpoolPool; use diesel_async::pooled_connection::AsyncDieselConnectionManager; use diesel_async::AsyncPgConnection; @@ -206,19 +206,10 @@ impl App { } } -#[derive(Clone, FromRequestParts)] +#[derive(Clone, FromRequestParts, Deref)] #[from_request(via(State))] pub struct AppState(pub Arc); -// deref so you can still access the inner fields easily -impl Deref for AppState { - type Target = App; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - impl FromRef for cookie::Key { fn from_ref(app: &AppState) -> Self { app.session_key().clone() From 5a968bc4f1f176f17499671fe181d7d9a98a2041 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 13 Dec 2024 09:24:39 +0100 Subject: [PATCH 3/4] tests/util/response: Derive `Deref for Response` --- src/tests/util/response.rs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/tests/util/response.rs b/src/tests/util/response.rs index 8fb01bdcad6..42525d5da13 100644 --- a/src/tests/util/response.rs +++ b/src/tests/util/response.rs @@ -3,27 +3,21 @@ use bytes::Bytes; use googletest::prelude::*; use serde_json::Value; use std::marker::PhantomData; -use std::ops::Deref; use std::str::from_utf8; use crate::rate_limiter::LimitedAction; +use derive_more::Deref; use http::{header, StatusCode}; /// A type providing helper methods for working with responses +#[derive(Deref)] #[must_use] pub struct Response { + #[deref] response: hyper::Response, return_type: PhantomData, } -impl Deref for Response<()> { - type Target = hyper::Response; - - fn deref(&self) -> &Self::Target { - &self.response - } -} - impl Response where for<'de> T: serde::Deserialize<'de>, From ce87a3c21a37b9b6212bc20958cea2eb29381589 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 13 Dec 2024 09:24:59 +0100 Subject: [PATCH 4/4] util/bytes_request: Derive `Deref for BytesRequest` --- Cargo.toml | 2 +- src/util/bytes_request.rs | 18 ++---------------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1a57dbca1c5..ee714e15898 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,7 +71,7 @@ chrono = { version = "=0.4.39", default-features = false, features = ["serde"] } clap = { version = "=4.5.23", features = ["derive", "env", "unicode", "wrap_help"] } cookie = { version = "=0.18.1", features = ["secure"] } deadpool-diesel = { version = "=0.6.1", features = ["postgres", "tracing"] } -derive_more = { version = "=1.0.0", features = ["deref"] } +derive_more = { version = "=1.0.0", features = ["deref", "deref_mut"] } dialoguer = "=0.11.0" diesel = { version = "=2.2.6", features = ["postgres", "serde_json", "chrono", "numeric"] } diesel-async = { version = "=0.5.2", features = ["async-connection-wrapper", "deadpool", "postgres"] } diff --git a/src/util/bytes_request.rs b/src/util/bytes_request.rs index 0cab3cdf99f..697bdfe7df9 100644 --- a/src/util/bytes_request.rs +++ b/src/util/bytes_request.rs @@ -3,28 +3,14 @@ use axum::body::Bytes; use axum::extract::{FromRequest, Request}; use axum::response::{IntoResponse, Response}; use axum::{async_trait, Extension, RequestExt}; +use derive_more::{Deref, DerefMut}; use http::StatusCode; use http_body_util::{BodyExt, LengthLimitError}; use std::error::Error; -use std::ops::{Deref, DerefMut}; -#[derive(Debug)] +#[derive(Debug, Deref, DerefMut)] pub struct BytesRequest(pub Request); -impl Deref for BytesRequest { - type Target = Request; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for BytesRequest { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - #[async_trait] impl FromRequest for BytesRequest where