[−][src]Struct abi_stable::sabi_types::version::VersionNumber
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: u32
minor: u32
patch: 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 GetStaticEquivalent_ for VersionNumber
[src]
type StaticEquivalent = _static_VersionNumber
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
const S_LAYOUT: &'static TypeLayout
[src]
const S_ABI_CONSTS: AbiConsts
[src]
impl Clone for VersionNumber
[src]
fn clone(&self) -> VersionNumber
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl Copy for VersionNumber
[src]
impl Eq for VersionNumber
[src]
impl PartialEq<VersionNumber> for VersionNumber
[src]
fn eq(&self, other: &VersionNumber) -> bool
[src]
fn ne(&self, other: &VersionNumber) -> bool
[src]
impl Display for VersionNumber
[src]
impl Debug for VersionNumber
[src]
Auto Trait Implementations
impl Send for VersionNumber
impl Sync for VersionNumber
impl Unpin for VersionNumber
impl UnwindSafe for VersionNumber
impl RefUnwindSafe for VersionNumber
Blanket Implementations
impl<This> GetConstGenericVTable for This where
This: StableAbi + Eq + PartialEq<This> + Debug + Send + Sync,
[src]
This: StableAbi + Eq + PartialEq<This> + Debug + Send + Sync,
const VTABLE: ConstGenericVTableFor<This>
[src]
impl<This> StableAbi for This where
This: SharedStableAbi<Kind = ValueKind>,
[src]
This: SharedStableAbi<Kind = ValueKind>,
const LAYOUT: &'static TypeLayout
[src]
const ABI_CONSTS: AbiConsts
[src]
impl<This> TransmuteElement for This where
This: ?Sized,
[src]
This: ?Sized,
unsafe fn transmute_element<T>(self) -> Self::TransmutedPtr where
Self: CanTransmuteElement<T>,
Self::Target: Sized,
[src]
Self: CanTransmuteElement<T>,
Self::Target: Sized,
impl<'a, T> BorrowOwned<'a> for T where
T: 'a + Clone,
[src]
T: 'a + Clone,
type ROwned = T
type RBorrowed = &'a T
fn r_borrow(
&'a <T as BorrowOwned<'a>>::ROwned
) -> <T as BorrowOwned<'a>>::RBorrowed
[src]
&'a <T as BorrowOwned<'a>>::ROwned
) -> <T as BorrowOwned<'a>>::RBorrowed
fn r_to_owned(
<T as BorrowOwned<'a>>::RBorrowed
) -> <T as BorrowOwned<'a>>::ROwned
[src]
<T as BorrowOwned<'a>>::RBorrowed
) -> <T as BorrowOwned<'a>>::ROwned
fn deref_borrowed(&<T as BorrowOwned<'a>>::RBorrowed) -> &T
[src]
fn deref_owned(&<T as BorrowOwned<'a>>::ROwned) -> &T
[src]
fn from_cow_borrow(&'a T) -> <T as BorrowOwned<'a>>::RBorrowed
[src]
fn from_cow_owned(<T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned
[src]
fn into_cow_borrow(<T as BorrowOwned<'a>>::RBorrowed) -> &'a T
[src]
fn into_cow_owned(<T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> TypeIdentity for T where
T: ?Sized,
[src]
T: ?Sized,
type Type = T
The same type as Self. Read more
fn into_type_val(self) -> Self::Type where
Self::Type: Sized,
[src]
Self::Type: Sized,
fn into_type_ref(&self) -> &Self::Type
[src]
fn into_type_mut(&mut self) -> &mut Self::Type
[src]
fn into_type_box(self: Box<Self>) -> Box<Self::Type>
[src]
fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
[src]
fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
[src]
fn from_type_val(this: Self::Type) -> Self where
Self::Type: Sized,
[src]
Self::Type: Sized,
fn from_type_ref(this: &Self::Type) -> &Self
[src]
fn from_type_mut(this: &mut Self::Type) -> &mut Self
[src]
fn from_type_box(this: Box<Self::Type>) -> Box<Self>
[src]
fn from_type_arc(this: Arc<Self::Type>) -> Arc<Self>
[src]
fn from_type_rc(this: Rc<Self::Type>) -> Rc<Self>
[src]
impl<T> SelfOps for T where
T: ?Sized,
[src]
T: ?Sized,
const T: PhantomData<fn() -> Self>
[src]
const T_D: PhantomData<Self>
[src]
fn assert_ty(self, _other: PhantomData<fn() -> Self>) -> Self
[src]
fn assert_ty_ref(&self, _other: PhantomData<fn() -> Self>) -> &Self
[src]
fn assert_ty_mut(&mut self, _other: PhantomData<fn() -> Self>) -> &mut Self
[src]
fn ty_(&self) -> PhantomData<fn() -> Self>
[src]
fn ty_d(&self) -> PhantomData<Self>
[src]
fn ty_inv(&self) -> PhantomData<fn(Self) -> Self>
[src]
fn ty_inv_ref(&self) -> PhantomData<Cell<&Self>>
[src]
fn eq_id(&self, other: &Self) -> bool
[src]
fn piped<F, U>(self, f: F) -> U where
F: FnOnce(Self) -> U,
[src]
F: FnOnce(Self) -> U,
fn piped_ref<'a, F, U>(&'a self, f: F) -> U where
F: FnOnce(&'a Self) -> U,
[src]
F: FnOnce(&'a Self) -> U,
fn piped_mut<'a, F, U>(&'a mut self, f: F) -> U where
F: FnOnce(&'a mut Self) -> U,
[src]
F: FnOnce(&'a mut Self) -> U,
fn mutated<F>(self, f: F) -> Self where
F: FnOnce(&mut Self),
[src]
F: FnOnce(&mut Self),
fn observe<F>(self, f: F) -> Self where
F: FnOnce(&Self),
[src]
F: FnOnce(&Self),
fn into_<T>(self, PhantomData<fn() -> T>) -> T where
Self: Into<T>,
[src]
Self: Into<T>,
fn as_ref_<T>(&self) -> &T where
Self: AsRef<T>,
T: ?Sized,
[src]
Self: AsRef<T>,
T: ?Sized,
fn as_mut_<T>(&mut self) -> &mut T where
Self: AsMut<T>,
T: ?Sized,
[src]
Self: AsMut<T>,
T: ?Sized,
fn drop_(self)
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,