[−][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
Implementations
impl VersionNumber
[src]
pub fn new(vn: VersionStrings) -> Result<Self, ParseVersionError>
[src]
Attempts to convert a VersionStrings
into a VersionNumber
Errors
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]
pub fn clone(&self) -> VersionNumber
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[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]
pub fn eq(&self, other: &VersionNumber) -> bool
[src]
pub fn ne(&self, other: &VersionNumber) -> bool
[src]
impl StableAbi for VersionNumber
[src]
type IsNonZeroType = False
Whether this type has a single invalid bit-pattern. Read more
pub const LAYOUT: &'static TypeLayout
[src]
pub const ABI_CONSTS: AbiConsts
[src]
impl StructuralEq for VersionNumber
[src]
impl StructuralPartialEq for VersionNumber
[src]
Auto Trait Implementations
impl RefUnwindSafe for VersionNumber
[src]
impl Send for VersionNumber
[src]
impl Sync for VersionNumber
[src]
impl Unpin for VersionNumber
[src]
impl UnwindSafe for VersionNumber
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<'a, T> BorrowOwned<'a> for T where
T: 'a + Clone,
[src]
T: 'a + Clone,
type ROwned = T
The owned type, stored in RCow::Owned
type RBorrowed = &'a T
The borrowed type, stored in RCow::Borrowed
pub 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
pub 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
pub fn deref_borrowed(&<T as BorrowOwned<'a>>::RBorrowed) -> &T
[src]
pub fn deref_owned(&<T as BorrowOwned<'a>>::ROwned) -> &T
[src]
pub fn from_cow_borrow(&'a T) -> <T as BorrowOwned<'a>>::RBorrowed
[src]
pub fn from_cow_owned(<T as ToOwned>::Owned) -> <T as BorrowOwned<'a>>::ROwned
[src]
pub fn into_cow_borrow(<T as BorrowOwned<'a>>::RBorrowed) -> &'a T
[src]
pub fn into_cow_owned(<T as BorrowOwned<'a>>::ROwned) -> <T as ToOwned>::Owned
[src]
impl<T> From<T> for T
[src]
impl<T> GetWithMetadata for T
[src]
type ForSelf = WithMetadata_<T, T>
This is always WithMetadata_<Self, Self>
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> SelfOps for T where
T: ?Sized,
[src]
T: ?Sized,
pub const T: PhantomData<fn() -> Self>
[src]
pub const T_D: PhantomData<Self>
[src]
pub fn assert_ty(self, _other: PhantomData<fn() -> Self>) -> Self
[src]
pub fn assert_ty_ref(&self, _other: PhantomData<fn() -> Self>) -> &Self
[src]
pub fn assert_ty_mut(&mut self, _other: PhantomData<fn() -> Self>) -> &mut Self
[src]
pub fn ty_(&self) -> PhantomData<fn() -> Self>
[src]
pub fn ty_d(&self) -> PhantomData<Self>
[src]
pub fn ty_inv(&self) -> PhantomData<fn(Self) -> Self>
[src]
pub fn ty_inv_ref(&self) -> PhantomData<Cell<&Self>>
[src]
pub fn eq_id(&self, other: &Self) -> bool
[src]
pub fn piped<F, U>(self, f: F) -> U where
F: FnOnce(Self) -> U,
[src]
F: FnOnce(Self) -> U,
pub fn piped_ref<'a, F, U>(&'a self, f: F) -> U where
F: FnOnce(&'a Self) -> U,
[src]
F: FnOnce(&'a Self) -> U,
pub 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,
pub fn mutated<F>(self, f: F) -> Self where
F: FnOnce(&mut Self),
[src]
F: FnOnce(&mut Self),
pub fn observe<F>(self, f: F) -> Self where
F: FnOnce(&Self),
[src]
F: FnOnce(&Self),
pub fn into_<T>(self, PhantomData<fn() -> T>) -> T where
Self: Into<T>,
[src]
Self: Into<T>,
pub fn as_ref_<T>(&self) -> &T where
Self: AsRef<T>,
T: ?Sized,
[src]
Self: AsRef<T>,
T: ?Sized,
pub fn as_mut_<T>(&mut self) -> &mut T where
Self: AsMut<T>,
T: ?Sized,
[src]
Self: AsMut<T>,
T: ?Sized,
pub fn drop_(self)
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<This> TransmuteElement for This where
This: ?Sized,
[src]
This: ?Sized,
pub unsafe fn transmute_element<T>(self) -> Self::TransmutedPtr where
Self: CanTransmuteElement<T>,
Self::Target: Sized,
[src]
Self: CanTransmuteElement<T>,
Self::Target: 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.
pub 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.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::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 error type returned when the conversion fails.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> TypeIdentity for T where
T: ?Sized,
[src]
T: ?Sized,
type Type = T
The same type as Self. Read more
pub fn into_type_val(self) -> Self::Type where
Self::Type: Sized,
[src]
Self::Type: Sized,
pub fn into_type_ref(&self) -> &Self::Type
[src]
pub fn into_type_mut(&mut self) -> &mut Self::Type
[src]
pub fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>
[src]
pub fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
[src]
pub fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
[src]
pub fn from_type_val(this: Self::Type) -> Self where
Self::Type: Sized,
[src]
Self::Type: Sized,
pub fn from_type_ref(this: &Self::Type) -> &Self
[src]
pub fn from_type_mut(this: &mut Self::Type) -> &mut Self
[src]
pub fn from_type_box(this: Box<Self::Type, Global>) -> Box<Self, Global>
[src]
pub fn from_type_arc(this: Arc<Self::Type>) -> Arc<Self>
[src]
pub fn from_type_rc(this: Rc<Self::Type>) -> Rc<Self>
[src]
impl<This> ValidTag_Bounds for This where
This: Debug + Clone + PartialEq<This>,
[src]
This: Debug + Clone + PartialEq<This>,