cargo::core::source_id

Struct 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(gctx: &GlobalContext) -> 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( gctx: &GlobalContext, ) -> CargoResult<SourceId>

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

source

pub fn crates_io_is_sparse(gctx: &GlobalContext) -> CargoResult<bool>

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

source

pub fn alt_registry(gctx: &GlobalContext, 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 kind(&self) -> &SourceKind

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, gctx: &'a GlobalContext, 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 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

fn with_precise(self, precise: &Option<Precise>) -> 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) -> Self
where Self: Sized,

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

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

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

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

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

impl PartialEq for SourceId

source§

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

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

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

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

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

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

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

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

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, dst: *mut T)

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

impl<Q, K> Comparable<K> for Q
where 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 Q
where 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 Q
where 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 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

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

source§

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

source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

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> ToString for T
where 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 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<V, T> VZip<V> for T
where 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 T
where 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