From d1a0d1bbce8016ce17201b0b78476655577cb129 Mon Sep 17 00:00:00 2001 From: Theo Butler Date: Fri, 6 Dec 2024 00:07:40 -0500 Subject: [PATCH] refactor: cleanup URLs --- src/indexers.rs | 3 - src/indexers/indexing_progress.rs | 7 +- src/indexers/public_poi.rs | 7 +- src/indexers/urls.rs | 76 ------------------- src/network/indexer_indexing_poi_resolver.rs | 12 ++- .../indexer_indexing_progress_resolver.rs | 10 +-- 6 files changed, 16 insertions(+), 99 deletions(-) delete mode 100644 src/indexers/urls.rs diff --git a/src/indexers.rs b/src/indexers.rs index 65c8448b..311e4523 100644 --- a/src/indexers.rs +++ b/src/indexers.rs @@ -1,5 +1,2 @@ -pub use urls::*; - pub mod indexing_progress; pub mod public_poi; -mod urls; diff --git a/src/indexers/indexing_progress.rs b/src/indexers/indexing_progress.rs index cd963cbf..c676159b 100644 --- a/src/indexers/indexing_progress.rs +++ b/src/indexers/indexing_progress.rs @@ -5,8 +5,7 @@ use thegraph_graphql_http::{ graphql::{Document, IntoDocument, IntoDocumentWithVariables}, http_client::{RequestError, ReqwestExt as _, ResponseError}, }; - -use super::urls::StatusUrl; +use url::Url; const INDEXING_PROGRESS_QUERY_DOCUMENT: &str = r#" query indexingProgress($deployments: [String!]!) { @@ -41,11 +40,11 @@ pub enum Error { /// Send a request to the indexer to get the indexing status of the given deployments. pub async fn send_request( client: &reqwest::Client, - url: StatusUrl, + status_url: Url, deployments: impl IntoIterator, ) -> Result, Error> { let resp = client - .post(url.into_inner()) + .post(status_url) .send_graphql::(Request::new(deployments)) .await .map_err(|err| match err { diff --git a/src/indexers/public_poi.rs b/src/indexers/public_poi.rs index 1a5a0735..4e1b654a 100644 --- a/src/indexers/public_poi.rs +++ b/src/indexers/public_poi.rs @@ -5,8 +5,7 @@ use thegraph_graphql_http::{ graphql::{Document, IntoDocument, IntoDocumentWithVariables}, http_client::{RequestError, ReqwestExt, ResponseError}, }; - -use super::urls::StatusUrl; +use url::Url; const PUBLIC_PROOF_OF_INDEXING_QUERY_DOCUMENT: &str = r#" query publicPois($requests: [PublicProofOfIndexingRequest!]!) { @@ -54,11 +53,11 @@ impl From<(DeploymentId, BlockNumber)> for PublicProofOfIndexingRequest { /// Send a request to the indexer to get the Public POIs of the given deployment-block number pairs. pub async fn send_request( client: &reqwest::Client, - url: StatusUrl, + status_url: Url, pois: impl IntoIterator, ) -> Result, Error> { let resp = client - .post(url.into_inner()) + .post(status_url) .send_graphql::(Request::new(pois)) .await .map_err(|err| match err { diff --git a/src/indexers/urls.rs b/src/indexers/urls.rs deleted file mode 100644 index 5931ff1a..00000000 --- a/src/indexers/urls.rs +++ /dev/null @@ -1,76 +0,0 @@ -use std::borrow::Borrow; - -use url::Url; - -/// Builds the URL to the status endpoint of the indexer. -/// -/// # Panics -/// The function panics if the URL cannot be built. -pub fn status_url>(url: U) -> StatusUrl { - let url = url - .borrow() - .join("status/") - .expect("failed to build indexer status URL"); - StatusUrl(url) -} - -/// Newtype wrapper around `Url` to provide type safety. -macro_rules! url_new_type { - ($name:ident) => { - /// Newtype wrapper around `Url` to provide type safety. - #[derive(Clone, PartialEq, Eq, Hash)] - pub struct $name(Url); - - impl $name { - /// Return the internal representation. - pub(super) fn into_inner(self) -> Url { - self.0 - } - } - - impl std::fmt::Display for $name { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - std::fmt::Display::fmt(&self.0, f) - } - } - - impl std::fmt::Debug for $name { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - std::fmt::Display::fmt(&self, f) - } - } - - impl AsRef for $name { - fn as_ref(&self) -> &Url { - &self.0 - } - } - - impl std::ops::Deref for $name { - type Target = Url; - - fn deref(&self) -> &Self::Target { - &self.0 - } - } - }; -} - -url_new_type!(StatusUrl); - -#[cfg(test)] -mod tests { - use url::Url; - - use super::status_url; - - /// Ensure the different URL builder functions accept owned and borrowed URL parameters. - #[test] - fn check_url_builders() { - let url = Url::parse("http://localhost:8020").expect("Invalid URL"); - - // Status URL - let _ = status_url(&url); - let _ = status_url(url.clone()); - } -} diff --git a/src/network/indexer_indexing_poi_resolver.rs b/src/network/indexer_indexing_poi_resolver.rs index 666f844f..8fe29db4 100644 --- a/src/network/indexer_indexing_poi_resolver.rs +++ b/src/network/indexer_indexing_poi_resolver.rs @@ -58,10 +58,10 @@ impl PoiResolver { url: &Url, pois: &[(DeploymentId, BlockNumber)], ) -> HashMap<(DeploymentId, BlockNumber), Result> { - let status_url = indexers::status_url(url); + let status_url = url.join("status").unwrap(); let res = tokio::time::timeout( self.timeout, - send_requests(&self.client, status_url, pois, POIS_PER_REQUEST_BATCH_SIZE), + send_requests(&self.client, &status_url, pois, POIS_PER_REQUEST_BATCH_SIZE), ) .await; @@ -162,7 +162,7 @@ impl PoiResolver { /// an error if the request failed. async fn send_requests( client: &reqwest::Client, - url: indexers::StatusUrl, + status_url: &Url, poi_requests: &[(DeploymentId, BlockNumber)], batch_size: usize, ) -> HashMap<(DeploymentId, BlockNumber), Result> { @@ -171,11 +171,9 @@ async fn send_requests( // Create a request for each batch let requests = request_batches.map(|batch| { - let url = url.clone(); + let status_url = status_url.clone(); async move { - // Request the indexings' POIs - let response = indexers::public_poi::send_request(client, url.clone(), batch).await; - + let response = indexers::public_poi::send_request(client, status_url, batch).await; let result = match response { Err(err) => { // If the request failed, mark all deployment-block number pairs in the batch as diff --git a/src/network/indexer_indexing_progress_resolver.rs b/src/network/indexer_indexing_progress_resolver.rs index 3a9dc9c2..f94b63f8 100644 --- a/src/network/indexer_indexing_progress_resolver.rs +++ b/src/network/indexer_indexing_progress_resolver.rs @@ -59,12 +59,12 @@ impl IndexingProgressResolver { url: &Url, indexings: &[DeploymentId], ) -> HashMap, ResolutionError>> { - let status_url = indexers::status_url(url); + let status_url = url.join("status").unwrap(); let res = tokio::time::timeout( self.timeout, send_requests( &self.client, - status_url, + &status_url, indexings, INDEXINGS_PER_REQUEST_BATCH_SIZE, ), @@ -132,7 +132,7 @@ impl IndexingProgressResolver { /// as failed. The function returns a map of deployment IDs to the indexing progress information. async fn send_requests( client: &reqwest::Client, - url: indexers::StatusUrl, + status_url: &Url, indexings: &[DeploymentId], batch_size: usize, ) -> HashMap, IndexingProgressFetchError>> { @@ -141,11 +141,11 @@ async fn send_requests( // Create a request for each batch let requests = request_batches.map(|batch| { - let url = url.clone(); + let status_url = status_url.clone(); async move { // Request the indexing progress let response = - indexers::indexing_progress::send_request(client, url.clone(), batch).await; + indexers::indexing_progress::send_request(client, status_url, batch).await; let result = match response { Err(err) => {