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/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() 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(); 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>, 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