pub struct Version<'input> {
pub major: u64,
pub minor: u64,
pub patch: u64,
pub additional: Additional,
pub pre: PreRelease<'input>,
pub build: Build<'input>,
}
Expand description
Represents a lenient semantic version number.
The version is bound to the lifetime of the input string.
Fields§
§major: u64
The major version.
minor: u64
The minor version.
patch: u64
The patch version.
additional: Additional
additional version numbers.
pre: PreRelease<'input>
The pre-release metadata.
build: Build<'input>
The build metadata.
Implementations§
§impl<'input> Version<'input>
impl<'input> Version<'input>
pub const fn empty() -> Version<'input>
pub const fn empty() -> Version<'input>
Constructs a new, empty version
Examples
let version = Version::empty();
assert_eq!(version.to_string(), "0.0.0")
pub const fn new(major: u64, minor: u64, patch: u64) -> Version<'input>
pub const fn new(major: u64, minor: u64, patch: u64) -> Version<'input>
Constructs a new version out of the three regular version components
Examples
let version = Version::new(1, 2, 3);
assert_eq!(version.to_string(), "1.2.3")
pub fn parse(input: &'input str) -> Result<Version<'input>, Error<'input>>
pub fn parse(input: &'input str) -> Result<Version<'input>, Error<'input>>
Parse a string slice into a Version.
This parser does not require semver-specification conformant input and is more lenient in what it allows.
For more information, see [lenient_semver_parser
].
Examples
let version = Version::parse("v1.2.3.4.5+build.42");
assert!(version.is_ok());
pub fn bump_major(&mut self)
pub fn bump_major(&mut self)
Bumps the major version.
Sets minor, patch, and additional numbers to 0, removes pre-release and build identifier.
Examples
let mut version = Version::parse("1.2.3.4.5-pre+build").unwrap();
version.bump_major();
assert_eq!(version.to_string(), "2.0.0.0.0");
pub fn bumped_major<'a>(&self) -> Version<'a>
pub fn bumped_major<'a>(&self) -> Version<'a>
Returns a new version with the major version bumped.
Sets minor, patch, and additional numbers to 0, removes pre-release and build identifier. The lifetime for the resulting version can differ from the lifetime of this version.
Examples
let version = Version::parse("1.2.3.4.5-pre+build").unwrap();
assert_eq!(version.bumped_major().to_string(), "2.0.0.0.0");
pub fn bump_minor(&mut self)
pub fn bump_minor(&mut self)
Bumps the minor version.
Sets patch and additional numbers to 0, removes pre-release and build identifier.
Examples
let mut version = Version::parse("1.2.3.4.5-pre+build").unwrap();
version.bump_minor();
assert_eq!(version.to_string(), "1.3.0.0.0");
pub fn bumped_minor<'a>(&self) -> Version<'a>
pub fn bumped_minor<'a>(&self) -> Version<'a>
Returns a new version with the minor version bumped.
Sets patch and additional numbers to 0, removes pre-release and build identifier. The lifetime for the resulting version can differ from the lifetime of this version.
Examples
let version = Version::parse("1.2.3.4.5-pre+build").unwrap();
assert_eq!(version.bumped_minor().to_string(), "1.3.0.0.0");
pub fn bump_patch(&mut self)
pub fn bump_patch(&mut self)
Bumps the patch version.
Sets any additional numbers to 0, removes pre-release and build identifier.
Examples
let mut version = Version::parse("1.2.3.4.5-pre+build").unwrap();
version.bump_patch();
assert_eq!(version.to_string(), "1.2.4.0.0");
pub fn bumped_patch<'a>(&self) -> Version<'a>
pub fn bumped_patch<'a>(&self) -> Version<'a>
Returns a new version with the patch version bumped.
Sets any additional numbers to 0, removes pre-release and build identifier. The lifetime for the resulting version can differ from the lifetime of this version.
Examples
let version = Version::parse("1.2.3.4.5-pre+build").unwrap();
assert_eq!(version.bumped_patch().to_string(), "1.2.4.0.0");
pub fn bump_additional(&mut self, index: usize)
pub fn bump_additional(&mut self, index: usize)
Bumps any additional version.
Sets any following additional numbers to 0, removes pre-release and build identifier. If there are not enough additional numbers, only the pre-release and build identifier is removed.
Examples
let mut version = Version::parse("1.2.3.4.5-pre+build").unwrap();
version.bump_additional(0);
assert_eq!(version.to_string(), "1.2.3.5.0");
let mut version = Version::parse("1.2.3.4.5-pre+build").unwrap();
version.bump_additional(1);
assert_eq!(version.to_string(), "1.2.3.4.6");
let mut version = Version::parse("1.2.3.4.5-pre+build").unwrap();
version.bump_additional(2);
assert_eq!(version.to_string(), "1.2.3.4.5");
pub fn bumped_additional<'a>(&self, index: usize) -> Version<'a>
pub fn bumped_additional<'a>(&self, index: usize) -> Version<'a>
Returns a new version with the minor version bumped.
Sets patch and additional numbers to 0, removes pre-release and build identifier. The lifetime for the resulting version can differ from the lifetime of this version.
Examples
let version = Version::parse("1.2.3.4.5-pre+build").unwrap();
assert_eq!(version.bumped_additional(0).to_string(), "1.2.3.5.0");
assert_eq!(version.bumped_additional(1).to_string(), "1.2.3.4.6");
assert_eq!(version.bumped_additional(2).to_string(), "1.2.3.4.5");
pub fn is_pre_release(&self) -> bool
pub fn is_pre_release(&self) -> bool
Returns true if this version has pre-release metadata, i.e. it represents a pre-release.
Examples
let version = Version::parse("1").unwrap();
assert!(!version.is_pre_release());
let version = Version::parse("1-pre").unwrap();
assert!(version.is_pre_release());
let version = Version::parse("1+build").unwrap();
assert!(!version.is_pre_release());
pub fn disassociate_metadata<'a>(
self
) -> (Version<'a>, PreRelease<'input>, Build<'input>)
pub fn disassociate_metadata<'a>( self ) -> (Version<'a>, PreRelease<'input>, Build<'input>)
Disassociate this Version by changing the lifetime to something new.
The returned is a copy of self without any metadata. Nothing in the new version references ’input, so we can change the lifetime to something else.
The existing identifiers for pre-release and build are returned as well, so that users can clone and re-add them.
Examples
use lenient_semver_parser::VersionBuilder;
let input = String::from("1-pre+build");
let version = Version::parse(&input).unwrap();
// couldn't drop input here
// drop(input);
let (mut version, pre, build) = version.disassociate_metadata::<'static>();
assert_eq!(Some("pre"), *pre);
assert_eq!(Some("build"), *build);
// now we can drop the input
drop(input);
// We can use the new version after it has be disassociated from `input`.
assert_eq!("1.0.0", version.to_string());
// only static metadata references are allowed now (because we said 'static earlier)
version.add_pre_release("pre2");
version.add_build("build2");
assert_eq!("1.0.0-pre2+build2", version.to_string());
Trait Implementations§
§impl<'de, 'input> Deserialize<'de> for Version<'input>where
'de: 'input,
impl<'de, 'input> Deserialize<'de> for Version<'input>where 'de: 'input,
§fn deserialize<D>(
deserializer: D
) -> Result<Version<'input>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>( deserializer: D ) -> Result<Version<'input>, <D as Deserializer<'de>>::Error>where D: Deserializer<'de>,
§impl Ord for Version<'_>
impl Ord for Version<'_>
§impl PartialEq<Version<'_>> for Version<'_>
impl PartialEq<Version<'_>> for Version<'_>
§impl PartialOrd<Version<'_>> for Version<'_>
impl PartialOrd<Version<'_>> for Version<'_>
§fn partial_cmp(&self, other: &Version<'_>) -> Option<Ordering>
fn partial_cmp(&self, other: &Version<'_>) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more§impl Serialize for Version<'_>
impl Serialize for Version<'_>
§fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>( &self, serializer: S ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where S: Serializer,
§impl<'input> VersionBuilder<'input> for Version<'input>
impl<'input> VersionBuilder<'input> for Version<'input>
§fn add_additional(&mut self, num: u64)
fn add_additional(&mut self, num: u64)
§fn add_pre_release(&mut self, pre_release: &'input str)
fn add_pre_release(&mut self, pre_release: &'input str)
impl Eq for Version<'_>
Auto Trait Implementations§
impl<'input> RefUnwindSafe for Version<'input>
impl<'input> Send for Version<'input>
impl<'input> Sync for Version<'input>
impl<'input> Unpin for Version<'input>
impl<'input> UnwindSafe for Version<'input>
Blanket Implementations§
§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.