[][src]Struct cargo_update::ops::MainRepoPackage

pub struct MainRepoPackage {
    pub name: 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 = MainRepoPackage::parse(package_s).unwrap();
assert_eq!(package,
           MainRepoPackage {
               name: "racer".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.

version: Option<Semver>

The package's locally installed version.

newest_version: Option<Semver>

The latest version of the package vailable at the main crates.io repository.

None by default, acquire via MainRepoPackage::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.

Methods

impl MainRepoPackage[src]

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

Try to decypher a package descriptor into a MainRepoPackage.

Will return None if:

  • the given package descriptor is invalid, or
  • the package descriptor is not from the main crates.io registry.

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

Examples

Main repository packages:

let package_s = "racer 1.2.10 (registry+https://github.com/rust-lang/crates.io-index)";
assert_eq!(MainRepoPackage::parse(package_s).unwrap(),
           MainRepoPackage {
               name: "racer".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+https://github.com/rust-lang/crates.io-index)";
assert_eq!(MainRepoPackage::parse(package_s).unwrap(),
           MainRepoPackage {
               name: "cargo-outdated".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!(MainRepoPackage::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>
) -> bool
[src]

Check whether this package needs to be installed

Examples

assert!(MainRepoPackage {
            name: "racer".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));
assert!(MainRepoPackage {
            name: "racer".to_string(),
            version: None,
            newest_version: Some(Semver::parse("2.0.6").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(None, None));
assert!(!MainRepoPackage {
            name: "racer".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));
assert!(!MainRepoPackage {
            name: "racer".to_string(),
            version: Some(Semver::parse("2.0.6").unwrap()),
            newest_version: None,
            alternative_version: None,
            max_version: None,
        }.needs_update(None, None));

let req = SemverReq::from_str("^1.7").unwrap();
assert!(MainRepoPackage {
            name: "racer".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));
assert!(MainRepoPackage {
            name: "racer".to_string(),
            version: None,
            newest_version: Some(Semver::parse("2.0.6").unwrap()),
            alternative_version: None,
            max_version: None,
        }.needs_update(Some(&req), None));
assert!(!MainRepoPackage {
            name: "racer".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));

assert!(!MainRepoPackage {
            name: "cargo-audit".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));
assert!(MainRepoPackage {
            name: "cargo-audit".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)));

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!(MainRepoPackage {
               name: "racer".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!(MainRepoPackage {
               name: "gutenberg".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 MainRepoPackage[src]

impl Debug for MainRepoPackage[src]

impl Eq for MainRepoPackage[src]

impl Hash for MainRepoPackage[src]

impl PartialEq<MainRepoPackage> for MainRepoPackage[src]

impl StructuralEq for MainRepoPackage[src]

impl StructuralPartialEq for MainRepoPackage[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 = !

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.