[][src]Struct cargo_update::ops::RegistryPackage

pub struct RegistryPackage {
    pub name: String,
    pub registry: String,
    pub version: Option<Semver>,
    pub newest_version: Option<Semver>,
    pub alternative_version: Option<Semver>,
    pub max_version: Option<Semver>,
}

A representation of a package from the main crates.io repository.

The newest version of a package is pulled from crates.io via pull_version().

The parse() function parses the format used in $HOME/.cargo/.crates.toml.

Examples

let package_s = "racer 1.2.10 (registry+https://github.com/rust-lang/crates.io-index)";
let mut package = RegistryPackage::parse(package_s).unwrap();
assert_eq!(package,
           RegistryPackage {
               name: "racer".to_string(),
               registry: "https://github.com/rust-lang/crates.io-index".to_string(),
               version: Some(Semver::parse("1.2.10").unwrap()),
               newest_version: None,
               alternative_version: None,
               max_version: None,
           });

package.pull_version(&registry_tree, &registry);
assert!(package.newest_version.is_some());

Fields

name: String

The package's name.

Go to https://crates.io/crates/{name} to get the crate info, if available on the main repository.

registry: String

The registry the package is available from.

Can be a name from ~/.cargo/config.

The main repository is https://github.com/rust-lang/crates.io-index

version: Option<Semver>

The package's locally installed version.

newest_version: Option<Semver>

The latest version of the package, available at crates.io, if in main repository.

None by default, acquire via RegistryPackage::pull_version().

alternative_version: Option<Semver>

If present, the alternative newest version not chosen because of unfulfilled requirements like (not) being a prerelease.

max_version: Option<Semver>

User-bounded maximum version to update up to.

Implementations

impl RegistryPackage[src]

pub fn parse(what: &str) -> Option<RegistryPackage>[src]

Try to decypher a package descriptor into a RegistryPackage.

Will return None if the given package descriptor is invalid.

In the returned instance, newest_version is always None, get it via RegistryPackage::pull_version().

Examples

Main repository packages:

let package_s = "racer 1.2.10 (registry+https://github.com/rust-lang/crates.io-index)";
assert_eq!(RegistryPackage::parse(package_s).unwrap(),
           RegistryPackage {
               name: "racer".to_string(),
               registry: "https://github.com/rust-lang/crates.io-index".to_string(),
               version: Some(Semver::parse("1.2.10").unwrap()),
               newest_version: None,
               alternative_version: None,
               max_version: None,
           });

let package_s = "cargo-outdated 0.2.0 (registry+file:///usr/local/share/cargo)";
assert_eq!(RegistryPackage::parse(package_s).unwrap(),
           RegistryPackage {
               name: "cargo-outdated".to_string(),
               registry: "file:///usr/local/share/cargo".to_string(),
               version: Some(Semver::parse("0.2.0").unwrap()),
               newest_version: None,
               alternative_version: None,
               max_version: None,
           });

Git repository:

let package_s = "treesize 0.2.1 (git+https://github.com/melak47/treesize-rs#v0.2.1)";
assert!(RegistryPackage::parse(package_s).is_none());

pub fn pull_version<'t>(
    &mut self,
    registry: &Tree<'t>,
    registry_parent: &'t Repository,
    install_prereleases: Option<bool>
)
[src]

Download the version list for this crate off the specified repository tree and set the latest and alternative versions.

pub fn needs_update(
    &self,
    req: Option<&SemverReq>,
    install_prereleases: Option<bool>,
    downdate: bool
) -> bool
[src]

Check whether this package needs to be installed

Examples

assert!(RegistryPackage {
            name: "racer".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: Some(Semver::parse("1.7.2").unwrap()),
            newest_version: Some(Semver::parse("2.0.6").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(None, None, false));
assert!(RegistryPackage {
            name: "racer".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: None,
            newest_version: Some(Semver::parse("2.0.6").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(None, None, false));
assert!(RegistryPackage {
            name: "racer".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: Some(Semver::parse("2.0.7").unwrap()),
            newest_version: Some(Semver::parse("2.0.6").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(None, None, true));
assert!(!RegistryPackage {
            name: "racer".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: Some(Semver::parse("2.0.6").unwrap()),
            newest_version: Some(Semver::parse("2.0.6").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(None, None, false));
assert!(!RegistryPackage {
            name: "racer".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: Some(Semver::parse("2.0.6").unwrap()),
            newest_version: None,
            alternative_version: None,
            max_version: None,
        }.needs_update(None, None, false));

let req = SemverReq::from_str("^1.7").unwrap();
assert!(RegistryPackage {
            name: "racer".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: Some(Semver::parse("1.7.2").unwrap()),
            newest_version: Some(Semver::parse("1.7.3").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(Some(&req), None, false));
assert!(RegistryPackage {
            name: "racer".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: None,
            newest_version: Some(Semver::parse("2.0.6").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(Some(&req), None, false));
assert!(!RegistryPackage {
            name: "racer".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: Some(Semver::parse("1.7.2").unwrap()),
            newest_version: Some(Semver::parse("2.0.6").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(Some(&req), None, false));

assert!(!RegistryPackage {
            name: "cargo-audit".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: None,
            newest_version: Some(Semver::parse("0.9.0-beta2").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(Some(&req), None, false));
assert!(RegistryPackage {
            name: "cargo-audit".to_string(),
            registry: "https://github.com/rust-lang/crates.io-index".to_string(),
            version: None,
            newest_version: Some(Semver::parse("0.9.0-beta2").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(Some(&req), Some(true), false));

pub fn update_to_version(&self) -> Option<&Semver>[src]

Get package version to update to, or None if the crate has no newest version (was yanked)

Examples

assert_eq!(RegistryPackage {
               name: "racer".to_string(),
               registry: "https://github.com/rust-lang/crates.io-index".to_string(),
               version: Some(Semver::parse("1.7.2").unwrap()),
               newest_version: Some(Semver::parse("2.0.6").unwrap()),
               alternative_version: None,
               max_version: Some(Semver::parse("2.0.5").unwrap()),
           }.update_to_version(),
           Some(&Semver::parse("2.0.5").unwrap()));
assert_eq!(RegistryPackage {
               name: "gutenberg".to_string(),
               registry: "https://github.com/rust-lang/crates.io-index".to_string(),
               version: Some(Semver::parse("0.0.7").unwrap()),
               newest_version: None,
               alternative_version: None,
               max_version: None,
           }.update_to_version(),
           None);

Trait Implementations

impl Clone for RegistryPackage[src]

impl Debug for RegistryPackage[src]

impl Eq for RegistryPackage[src]

impl Hash for RegistryPackage[src]

impl PartialEq<RegistryPackage> for RegistryPackage[src]

impl StructuralEq for RegistryPackage[src]

impl StructuralPartialEq for RegistryPackage[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.