# Struct cargo::core::source_id::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 `Display`ed 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 has_precise(self) -> bool

Check if the precise data field has bean set

source

#### pub fn has_locked_precise(self) -> bool

Check if the precise data field has bean set to “locked”

source

#### pub fn has_same_precise_as(self, other: Self) -> bool

Check if two sources have the same precise data field

source

#### pub fn precise_registry_version(self, pkg: &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.

source

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

source

#### pub fn precise_git_oid(self) -> CargoResult<Option<Oid>>

source

#### pub fn with_git_precise(self, fragment: Option<String>) -> SourceId

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

source

#### pub fn without_precise(self) -> SourceId

Creates a new `SourceId` from this source without a `precise`.

source

#### pub fn with_locked_precise(self) -> SourceId

Creates a new `SourceId` from this source without a `precise`.

source

#### pub fn with_precise_from(self, v: Self) -> SourceId

Creates a new `SourceId` from this source with the `precise` from some other `SourceId`.

source

#### pub fn with_precise_registry_version( self, name: InternedString, 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,

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

### impl PartialEq 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 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§

§

### impl RefUnwindSafe for SourceId

§

### impl Send for SourceId

§

### impl Sync for SourceId

§

### impl Unpin for SourceId

§

### impl UnwindSafe for SourceId

## 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.

§

### 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 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 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

§

### 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
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