Skip to main content

GoRegistry

Struct GoRegistry 

Source
pub struct GoRegistry { /* private fields */ }
Expand description

Client for interacting with proxy.golang.org.

Uses the Go module proxy protocol for version lookups and metadata. All requests are cached via the provided HttpCache.

Implementations§

Source§

impl GoRegistry

Source

pub fn new(cache: Arc<HttpCache>) -> GoRegistry

Creates a new Go registry client with the given HTTP cache.

Source

pub fn register_chain(root: &Arc<GoRegistry>, chain: &GoProxyChain)

Builds the full hop chain for one GoProxyChain and inserts the head into root.alternates under chain.key. Idempotent per key (a repeat registration for the same key is a no-op), capacity-capped at MAX_ALTERNATE_REGISTRIES. Mirrors deps_pypi::PypiRegistry::register_chain exactly in shape.

Source

pub fn alternate_client(&self, index: &str) -> Option<Arc<GoRegistry>>

The registered client for index (a GoProxyChain::key or crate::config::GOPRIVATE_CHAIN_KEY), if any — read-only, performs no registration, no validation.

Only ever meaningful on the root: a chain-hop leaf’s own alternates map is always empty by construction (Self::with_base/Self::terminal never populate it).

Source

pub async fn get_versions( &self, module_path: &str, ) -> Result<Vec<GoVersion>, DepsError>

Fetches all versions for a module from the /@v/list endpoint.

Returns versions in registry order (not sorted). Includes pseudo-versions.

§Errors

Returns an error if:

  • HTTP request fails
  • Response body is invalid UTF-8
  • Module does not exist (404)
  • Module path is invalid or too long
§Examples
let cache = Arc::new(HttpCache::new());
let registry = GoRegistry::new(cache);

let versions = registry.get_versions("github.com/gin-gonic/gin").await.unwrap();
assert!(!versions.is_empty());
Source

pub async fn get_version_info( &self, module_path: &str, version: &str, ) -> Result<GoVersion, DepsError>

Fetches version metadata from the /@v/{version}.info endpoint.

Returns version with timestamp information.

§Errors

Returns an error if:

  • HTTP request fails
  • JSON parsing fails
  • Module path or version string is invalid
§Examples
let cache = Arc::new(HttpCache::new());
let registry = GoRegistry::new(cache);

let info = registry.get_version_info("github.com/gin-gonic/gin", "v1.9.1").await.unwrap();
assert_eq!(info.version, "v1.9.1");
Source

pub async fn get_latest( &self, module_path: &str, ) -> Result<GoVersion, DepsError>

Fetches latest version using the /@latest endpoint.

Returns the latest stable version (non-pseudo).

§Errors

Returns an error if:

  • HTTP request fails
  • JSON parsing fails
  • Module path is invalid
§Examples
let cache = Arc::new(HttpCache::new());
let registry = GoRegistry::new(cache);

let latest = registry.get_latest("github.com/gin-gonic/gin").await.unwrap();
assert!(!latest.is_pseudo);
Source

pub async fn get_go_mod( &self, module_path: &str, version: &str, ) -> Result<String, DepsError>

Fetches the go.mod file for a specific version.

Returns the raw content of the go.mod file.

§Errors

Returns an error if:

  • HTTP request fails
  • Response body is invalid UTF-8
  • Module path or version string is invalid
§Examples
let cache = Arc::new(HttpCache::new());
let registry = GoRegistry::new(cache);

let go_mod = registry.get_go_mod("github.com/gin-gonic/gin", "v1.9.1").await.unwrap();
assert!(go_mod.contains("module github.com/gin-gonic/gin"));

Trait Implementations§

Source§

impl Clone for GoRegistry

Source§

fn clone(&self) -> GoRegistry

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Registry for GoRegistry

Source§

fn get_versions_from<'a>( &'a self, name: &'a PackageName, source: &'a DependencySource, freshness: FreshnessSettings, ) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>

Dispatches by source (spec 034 FR-013): an AlternateRegistry whose index has a registered client routes through GoRegistry::get_versions_chained (FR-005’s chain walk); one with no registered client is PackageNotFound, never a fall back to proxy.golang.org (Go always sets mirrors_crates_io: false, so Cargo’s mirror-degradation arm is dead here and must not be written — falling back would send a private module path to the public proxy, the exact class of leak FR-008/FR-009 close). Every other source keeps today’s public-registry path unchanged.

Source§

fn get_latest_matching_from<'a>( &'a self, name: &'a PackageName, source: &'a DependencySource, req: &'a VersionReq, _minimum_stability: Option<&'a str>, ) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>

get_versions_from’s get_latest_matching-shaped counterpart — same dispatch, same “never fall back to proxy.golang.org for an unregistered AlternateRegistry” invariant. Derived from GoRegistry::get_versions_chained + deps_core::Registry::select_latest_matching (mirrors deps-pypi’s identical derivation) rather than an independent per-hop matching walk — the winning hop (first hop with a non-empty version list) is selected once, and matching happens only within that single hop’s list. No /@latest fast path for a chain hop (unlike the plain public-registry path below): phase 1 keeps this simple and correct rather than optimizing an extra request off the private-proxy path.

Source§

fn get_versions<'a>( &'a self, name: &'a PackageName, ) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>

Fetches all available versions for a package. Read more
Source§

fn get_latest_matching<'a>( &'a self, name: &'a PackageName, _req: &'a VersionReq, ) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>

Finds the latest version matching a version requirement. Read more
Source§

fn search<'a>( &'a self, _query: &'a str, _limit: usize, ) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Metadata>>, DepsError>> + Send + 'a>>

Searches for packages by name or keywords. Read more
Source§

fn select_latest_matching( &self, versions: &[Box<dyn Version>], _req: &VersionReq, ) -> Option<usize>

Index of the latest version in versions satisfying req, with no I/O. Read more
Source§

fn reports_yanked(&self) -> bool

Whether get_versions results carry meaningful per-version yank/deprecation data via Version::removal_status. Read more
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Downcast to concrete registry type for ecosystem-specific operations
Source§

fn get_versions_with<'a>( &'a self, name: &'a PackageName, freshness: FreshnessSettings, ) -> Pin<Box<dyn Future<Output = Result<Vec<Box<dyn Version>>, DepsError>> + Send + 'a>>

Like get_versions, but lets a registry that can obtain Version::published_at only through an extra request gate that request behind freshness.enabled instead of always paying for it. Read more
Source§

fn get_latest_matching_with_context<'a>( &'a self, name: &'a PackageName, req: &'a VersionReq, minimum_stability: Option<&'a str>, ) -> Pin<Box<dyn Future<Output = Result<Option<Box<dyn Version>>, DepsError>> + Send + 'a>>

Like get_latest_matching, but lets a registry whose “latest matching” selection can be refined by ecosystem-specific manifest state (e.g. Composer’s minimum-stability field, #424) read it, alongside req. Read more
Source§

fn select_latest_matching_with_context( &self, versions: &[Box<dyn Version>], req: &VersionReq, minimum_stability: Option<&str>, ) -> Option<usize>

Like select_latest_matching, but lets a registry whose selection can be refined by ecosystem-specific manifest state (e.g. Composer’s minimum-stability field, #424) read it, alongside versions and req. See get_latest_matching_with_context for why minimum_stability is an opaque per-ecosystem string rather than a shared type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more