Struct versions::Version

source ·
pub struct Version {
    pub epoch: Option<u32>,
    pub chunks: Chunks,
    pub release: Option<Release>,
    pub meta: Option<String>,
}
Expand description

A version number with decent structure and comparison logic.

This is a descriptive scheme, meaning that it encapsulates the most common, unconscious patterns that developers use when assigning version numbers to their software. If not SemVer, most version numbers found in the wild will parse as a Version. These generally conform to the x.x.x-x pattern, and may optionally have an epoch.

§Epochs

Epochs are prefixes marked by a colon, like in 1:2.3.4. When comparing two Version values, epochs take precedent. So 2:1.0.0 > 1:9.9.9. If one of the given Versions has no epoch, its epoch is assumed to be 0.

§Examples

use versions::{SemVer, Version};

// None of these are SemVer, but can still be parsed and compared.
let vers = vec!["0.25-2", "8.u51-1", "20150826-1", "1:2.3.4"];

for v in vers {
    assert!(SemVer::new(v).is_none());
    assert!(Version::new(v).is_some());
}

Fields§

§epoch: Option<u32>

An optional prefix that marks that some paradigm shift in versioning has occurred between releases of some software.

§chunks: Chunks

The main sections of the Version. Unlike SemVer, these sections are allowed to contain letters.

§release: Option<Release>

This either indicates a prerelease like SemVer, or a “release” revision for software packages. In the latter case, a version like 1.2.3-2 implies that the software itself hasn’t changed, but that this is the second bundling/release (etc.) of that particular package.

§meta: Option<String>

Some extra metadata that doesn’t factor into comparison.

Implementations§

source§

impl Version

source

pub fn new(s: &str) -> Option<Version>

Parse a Version from some input.

source

pub fn nth(&self, n: usize) -> Option<u32>

Try to extract a position from the Version as a nice integer, as if it were a SemVer.

use versions::Version;

let mess = Version::new("1:2.a.4.5.6.7-r1").unwrap();
assert_eq!(Some(2), mess.nth(0));
assert_eq!(None, mess.nth(1));
assert_eq!(Some(4), mess.nth(2));
source

pub fn nth_lenient(&self, n: usize) -> Option<u32>

Like nth, but pulls a number even if it was followed by letters.

source

pub fn to_mess(&self) -> Mess

A lossless conversion from Version to Mess.

use versions::Version;

let orig = "1:1.2.3-r1";
let mess = Version::new(orig).unwrap().to_mess();

assert_eq!(orig, format!("{}", mess));
source

pub fn parse(i: &str) -> IResult<&str, Version>

The raw nom parser for Version. Feel free to use this in combination with other general nom parsers.

Trait Implementations§

source§

impl Clone for Version

source§

fn clone(&self) -> Version

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 Version

source§

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

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

impl Default for Version

source§

fn default() -> Version

Returns the “default value” for a type. Read more
source§

impl Display for Version

source§

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

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

impl FromStr for Version

§

type Err = Error

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
source§

impl Hash for Version

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

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 Version

source§

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

If two epochs are equal, we need to compare their actual version numbers. Otherwise, the comparison of the epochs is the only thing that matters.

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 + PartialOrd,

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

impl PartialEq for Version

source§

fn eq(&self, other: &Version) -> 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 Version

source§

fn partial_cmp(&self, other: &Self) -> 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 TryFrom<&str> for Version

source§

fn try_from(value: &str) -> Result<Self, Self::Error>

use versions::Version;

let orig = "1.2.3.4";
let prsd: Version = orig.try_into().unwrap();
assert_eq!(orig, prsd.to_string());
§

type Error = Error

The type returned in the event of a conversion error.
source§

impl Eq for Version

source§

impl StructuralPartialEq for Version

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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.

source§

impl<T> ToOwned for T
where 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 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>,

§

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

§

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.