[][src]Struct abi_stable::sabi_types::version::VersionNumber

#[repr(C)]
pub struct VersionNumber {
    pub major: u32,
    pub minor: u32,
    pub patch: u32,
}

The parsed (<major>.<minor>.<patch>) version number of a library.

Post 1.0 major version

Major versions are mutually incompatible for both users and implementors.

Minor allow users to have a version less than or equal to that of the implementor, and disallows implementors from making changes that would break any previous minor release (with the same major number).

Patch cannot change the api/abi of the library at all,fixes only.

Example

use abi_stable::sabi_types::VersionNumber;

let v0_1_0=VersionNumber{major:0,minor:1,patch:0};
let v0_1_5=VersionNumber{major:0,minor:1,patch:5};
let v0_1_8=VersionNumber{major:0,minor:1,patch:8};
let v0_2_0=VersionNumber{major:0,minor:2,patch:0};


assert!(  v0_1_0.is_compatible(v0_1_5),"'{}' '{}'",v0_1_0,v0_1_5);
assert!(  v0_1_5.is_compatible(v0_1_8),"'{}' '{}'",v0_1_5,v0_1_8);
assert!( !v0_1_8.is_compatible(v0_2_0),"'{}' '{}'",v0_1_8,v0_2_0);

Fields

major: u32minor: u32patch: u32

Methods

impl VersionNumber[src]

pub fn new(vn: VersionStrings) -> Result<Self, ParseVersionError>[src]

Attempts to convert a VersionStrings into a VersionNumber

This returns a ParseVersionError if the string is not correctly formatted.

Example

use abi_stable::sabi_types::{VersionNumber,VersionStrings};
 
static VERSION:VersionStrings=VersionStrings::new("10.5.20");
 
assert_eq!( VersionNumber::new(VERSION), Ok(VersionNumber{major:10,minor:5,patch:20}) );

let err_version=VersionStrings::new("not a version number");
assert!( VersionNumber::new(err_version).is_err() );
 

pub fn is_compatible(self, library_implementor: VersionNumber) -> bool[src]

Whether the self version number is compatible with the library_implementor version number.

This uses modified semver rules where:

  • For 0.y.z ,y is interpreted as a major version, z is interpreted as the minor version,

  • For x.y.z ,x>=1,y is interpreted as a minor version.

  • Libraries are compatible so long as they are the same major version with a minor_version >=self.

Example

use abi_stable::sabi_types::VersionNumber;

let v0_1_0=VersionNumber{major:0,minor:1,patch:0};
let v0_1_5=VersionNumber{major:0,minor:1,patch:5};
let v0_1_8=VersionNumber{major:0,minor:1,patch:8};
let v0_2_0=VersionNumber{major:0,minor:2,patch:0};

assert!(  v0_1_0.is_compatible(v0_1_5),"'{}' '{}'",v0_1_0,v0_1_5);
assert!(  v0_1_5.is_compatible(v0_1_8),"'{}' '{}'",v0_1_5,v0_1_8);
assert!( !v0_1_8.is_compatible(v0_2_0),"'{}' '{}'",v0_1_8,v0_2_0);

pub fn is_loosely_compatible(self, library_implementor: VersionNumber) -> bool[src]

Whether the self version number is compatible with the library version number.

This uses the same semver rules as cargo:

  • For 0.y.z ,y is interpreted as a major version, z is interpreted as the minor version,

  • For x.y.z ,x>=1,y is interpreted as a minor version.

  • Libraries are compatible so long as they are the same major version irrespective of their minor version.

Example

use abi_stable::sabi_types::VersionNumber;

let v0_1_0=VersionNumber{major:0,minor:1,patch:0};
let v0_1_5=VersionNumber{major:0,minor:1,patch:5};
let v0_1_8=VersionNumber{major:0,minor:1,patch:8};
let v0_2_0=VersionNumber{major:0,minor:2,patch:0};
let v0_2_8=VersionNumber{major:0,minor:2,patch:8};
let v1_0_0=VersionNumber{major:1,minor:0,patch:0};
let v1_5_0=VersionNumber{major:1,minor:5,patch:0};
let v2_0_0=VersionNumber{major:2,minor:0,patch:0};

fn is_compat_assert( l:VersionNumber, r:VersionNumber, are_they_compat:bool ){
    assert_eq!( l.is_loosely_compatible(r), are_they_compat );
    assert_eq!( r.is_loosely_compatible(l), are_they_compat );
}

is_compat_assert( v0_1_0, v0_1_5, true );
is_compat_assert( v0_1_5, v0_1_8, true );
is_compat_assert( v1_0_0, v1_5_0, true );
is_compat_assert( v0_1_8, v0_2_0, false);
is_compat_assert( v0_2_8, v1_0_0, false);
is_compat_assert( v2_0_0, v1_0_0, false);
is_compat_assert( v2_0_0, v1_5_0, false);

Trait Implementations

impl Clone for VersionNumber[src]

impl Copy for VersionNumber[src]

impl Debug for VersionNumber[src]

impl Display for VersionNumber[src]

impl Eq for VersionNumber[src]

impl GetStaticEquivalent_ for VersionNumber[src]

type StaticEquivalent = _static_VersionNumber

impl PartialEq<VersionNumber> for VersionNumber[src]

impl SharedStableAbi for VersionNumber[src]

type IsNonZeroType = False

Whether this type has a single invalid bit-pattern. Read more

type Kind = __ValueKind

The kind of abi stability of this type,there are 2: Read more

impl StructuralEq for VersionNumber[src]

impl StructuralPartialEq for VersionNumber[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<'a, T> BorrowOwned<'a> for T where
    T: 'a + Clone
[src]

type ROwned = T

type RBorrowed = &'a T

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

impl<This> GetConstGenericVTable for This where
    This: StableAbi + Eq + PartialEq<This> + Debug + Send + Sync
[src]

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

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

impl<This> StableAbi for This where
    This: SharedStableAbi<Kind = ValueKind>, 
[src]

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

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<This> TransmuteElement for This where
    This: ?Sized
[src]

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.

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

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

The error type returned when the conversion fails.

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

type Type = T

The same type as Self. Read more