Struct cargo::core::SourceId

source ·
pub struct SourceId {
    inner: &'static SourceIdInner,
}
Expand description

Unique identifier for a source of packages.

Cargo uniquely identifies packages using PackageId, a combination of the package name, version, and the code source. SourceId exactly represents the “code source” in PackageId. See SourceId::hash to learn what are taken into account for the uniqueness of a source.

SourceId is usually associated with an instance of Source, which is supposed to provide a SourceId via Source::source_id method.

Fields§

§inner: &'static SourceIdInner

Implementations§

source§

impl SourceId

source

fn new(kind: SourceKind, url: Url, key: Option<KeyOf>) -> CargoResult<SourceId>

Creates a SourceId object from the kind and URL.

The canonical url will be calculated, but the precise field will not

source

fn wrap(inner: SourceIdInner) -> SourceId

Interns the value and returns the wrapped type.

source

fn remote_source_kind(url: &Url) -> SourceKind

source

pub fn from_url(string: &str) -> CargoResult<SourceId>

Parses a source URL and returns the corresponding ID.

Example
use cargo::core::SourceId;
SourceId::from_url("git+https://github.com/alexcrichton/\
                    libssh2-static-sys#80e71a3021618eb05\
                    656c58fb7c5ef5f12bc747f");
source

pub fn as_url(&self) -> SourceIdAsUrl<'_>

A view of the SourceId that can be Displayed as a URL.

source

pub fn as_encoded_url(&self) -> SourceIdAsUrl<'_>

Like Self::as_url but with URL parameters encoded.

source

pub fn for_path(path: &Path) -> CargoResult<SourceId>

Creates a SourceId from a filesystem path.

path: an absolute path.

source

pub fn for_git(url: &Url, reference: GitReference) -> CargoResult<SourceId>

Creates a SourceId from a Git reference.

source

pub fn for_registry(url: &Url) -> CargoResult<SourceId>

Creates a SourceId from a remote registry URL when the registry name cannot be determined, e.g. a user passes --index directly from CLI.

Use SourceId::for_alt_registry if a name can provided, which generates better messages for cargo.

source

pub fn for_alt_registry(url: &Url, key: &str) -> CargoResult<SourceId>

Creates a SourceId for a remote registry from the [registries] table or crates.io.

source

pub fn for_source_replacement_registry( url: &Url, key: &str ) -> CargoResult<SourceId>

Creates a SourceId for a remote registry from the [source] replacement table.

source

pub fn for_local_registry(path: &Path) -> CargoResult<SourceId>

Creates a SourceId from a local registry path.

source

pub fn for_directory(path: &Path) -> CargoResult<SourceId>

Creates a SourceId from a directory path.

source

pub fn crates_io(config: &Config) -> CargoResult<SourceId>

Returns the SourceId corresponding to the main repository.

This is the main cargo registry by default, but it can be overridden in a .cargo/config.toml.

source

pub fn crates_io_maybe_sparse_http(config: &Config) -> CargoResult<SourceId>

Returns the SourceId corresponding to the main repository, using the sparse HTTP index if allowed.

source

pub fn crates_io_is_sparse(config: &Config) -> CargoResult<bool>

Returns whether to access crates.io over the sparse protocol.

source

pub fn alt_registry(config: &Config, key: &str) -> CargoResult<SourceId>

Gets the SourceId associated with given name of the remote registry.

source

pub fn url(&self) -> &Url

Gets this source URL.

source

pub fn canonical_url(&self) -> &CanonicalUrl

Gets the canonical URL of this source, used for internal comparison purposes.

source

pub fn display_index(self) -> String

Displays the text “crates.io index” for Cargo shell status output.

source

pub fn display_registry_name(self) -> String

Displays the name of a registry if it has one. Otherwise just the URL.

source

pub fn alt_registry_key(&self) -> Option<&str>

Gets the name of the remote registry as defined in the [registries] table, or the built-in crates-io key.

source

pub fn is_path(self) -> bool

Returns true if this source is from a filesystem path.

source

pub fn local_path(self) -> Option<PathBuf>

Returns the local path if this is a path dependency.

source

pub fn is_registry(self) -> bool

Returns true if this source is from a registry (either local or not).

source

pub fn is_sparse(self) -> bool

Returns true if this source is from a sparse registry.

source

pub fn is_remote_registry(self) -> bool

Returns true if this source is a “remote” registry.

“remote” may also mean a file URL to a git index, so it is not necessarily “remote”. This just means it is not local-registry.

source

pub fn is_git(self) -> bool

Returns true if this source from a Git repository.

source

pub fn load<'a>( self, config: &'a Config, yanked_whitelist: &HashSet<PackageId> ) -> CargoResult<Box<dyn Source + 'a>>

Creates an implementation of Source corresponding to this ID.

  • yanked_whitelist — Packages allowed to be used, even if they are yanked.
source

pub fn git_reference(self) -> Option<&'static GitReference>

Gets the Git reference if this is a git source, otherwise None.

source

pub fn precise(self) -> Option<&'static str>

Gets the value of the precise field.

source

pub fn precise_registry_version(self, name: &str) -> Option<(Version, Version)>

Check if the precise data field stores information for this name from a call to SourceId::with_precise_registry_version.

If so return the version currently in the lock file and the version to be updated to. If specified, our own source will have a precise version listed of the form

source

pub fn with_precise(self, v: Option<String>) -> SourceId

Creates a new SourceId from this source with the given precise.

source

pub fn with_precise_registry_version( self, name: impl Display, version: &Version, precise: &str ) -> CargoResult<SourceId>

When updating a lock file on a version using cargo update --precise the requested version is stored in the precise field. On a registry dependency we also need to keep track of the package that should be updated and even which of the versions should be updated. All of this gets encoded in the precise field using this method. The data can be read with SourceId::precise_registry_version

source

pub fn is_crates_io(self) -> bool

Returns true if the remote registry is the standard https://crates.io.

source

pub fn stable_hash<S: Hasher>(self, workspace: &Path, into: &mut S)

Hashes self.

For paths, remove the workspace prefix so the same source will give the same hash in different locations, helping reproducible builds.

source

pub fn full_eq(self, other: SourceId) -> bool

source

pub fn full_hash<S: Hasher>(self, into: &mut S)

Trait Implementations§

source§

impl Clone for SourceId

source§

fn clone(&self) -> SourceId

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for SourceId

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for SourceId

source§

fn deserialize<D>(d: D) -> Result<SourceId, D::Error>where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for SourceId

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for SourceId

The hash of SourceId is used in the name of some Cargo folders, so shouldn’t vary. as_str gives the serialisation of a url (which has a spec) and so insulates against possible changes in how the url crate does hashing.

source§

fn hash<S: Hasher>(&self, into: &mut S)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for SourceId

source§

fn cmp(&self, other: &SourceId) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<SourceId> for SourceId

source§

fn eq(&self, other: &SourceId) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd<SourceId> for SourceId

source§

fn partial_cmp(&self, other: &SourceId) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Serialize for SourceId

source§

fn serialize<S>(&self, s: S) -> Result<S::Ok, S::Error>where S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for SourceId

source§

impl Eq for SourceId

source§

impl StructuralEq for SourceId

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
§

impl<Q, K> Comparable<K> for Qwhere Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

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

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

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 Twhere 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> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> Serialize for Twhere T: Serialize + ?Sized,

source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<Ok, Error>

source§

impl<T> ToOwned for Twhere T: Clone,

§

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> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

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

§

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 Twhere U: TryFrom<T>,

§

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<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

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
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 8 bytes