From 21eac33e1f6f7b3c205d3be8c707160125e28ec3 Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Thu, 21 Jul 2022 13:13:07 +1000 Subject: [PATCH] Optimize: Create new fn `helpers::cargo_home` that caches return value of `home::cargo_home` Signed-off-by: Jiahao XU --- src/helpers.rs | 10 ++++++++++ src/metafiles/v1.rs | 3 ++- src/metafiles/v2.rs | 3 ++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/helpers.rs b/src/helpers.rs index 3dc2de96..3381c839 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -1,12 +1,14 @@ use std::fmt::Debug; use std::fs; use std::io; +use std::ops; use std::path::{Path, PathBuf}; use bytes::Bytes; use cargo_toml::Manifest; use futures_util::stream::Stream; use log::debug; +use once_cell::sync::OnceCell; use reqwest::{tls, Client, ClientBuilder, Method, Response}; use serde::Serialize; use tempfile::NamedTempFile; @@ -40,6 +42,14 @@ pub use tls_version::TLSVersion; mod crate_name; pub use crate_name::CrateName; +pub fn cargo_home() -> Result<&'static Path, io::Error> { + static CARGO_HOME: OnceCell = OnceCell::new(); + + CARGO_HOME + .get_or_try_init(home::cargo_home) + .map(ops::Deref::deref) +} + pub async fn await_task(task: tokio::task::JoinHandle>) -> miette::Result { match task.await { Ok(res) => res, diff --git a/src/metafiles/v1.rs b/src/metafiles/v1.rs index 1180814a..19f0ab8f 100644 --- a/src/metafiles/v1.rs +++ b/src/metafiles/v1.rs @@ -10,6 +10,7 @@ use serde::{Deserialize, Serialize}; use thiserror::Error; use super::CrateVersionSource; +use crate::cargo_home; #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct CratesToml { @@ -18,7 +19,7 @@ pub struct CratesToml { impl CratesToml { pub fn default_path() -> Result { - Ok(home::cargo_home()?.join(".crates.toml")) + Ok(cargo_home()?.join(".crates.toml")) } pub fn load() -> Result { diff --git a/src/metafiles/v2.rs b/src/metafiles/v2.rs index 70c4e46e..4724b1e8 100644 --- a/src/metafiles/v2.rs +++ b/src/metafiles/v2.rs @@ -9,6 +9,7 @@ use serde::{Deserialize, Serialize}; use thiserror::Error; use super::CrateVersionSource; +use crate::cargo_home; #[derive(Clone, Debug, Default, Deserialize, Serialize)] pub struct Crates2Json { @@ -39,7 +40,7 @@ pub struct CrateInfo { impl Crates2Json { pub fn default_path() -> Result { - Ok(home::cargo_home()?.join(".crates2.json")) + Ok(cargo_home()?.join(".crates2.json")) } pub fn load() -> Result {