# simple-version
[](https://github.com/foolkat/simple-version)
[](https://crates.io/crates/simple-version)
[](https://docs.rs/simple-version)
[](https://github.com/foolkat/simple-version/actions?query=branch%3Amain)
A small Rust library that provides a `Version<T>` type for handling semantic versioning,
including an optional build number. It also offers a `version_from_pkg!` macro to embed
the crate's compile-time `CARGO_PKG_VERSION` directly into your code.
---
## Examples
### 1. create a new `Version` object
*(without a build number)*
```rust
use simple_version::Version;
let v = Version::<u32>::new(1, 2, 3);
println!("{}", v); // 1.2.3
```
---
### 2. create a new `Version` object
*(with a build number)*
```rust
use simple_version::Version;
let v = Version::<u32>::new(1, 2, 3).build(4);
println!("{}", v); // 1.2.3+4
```
---
### 3. create a new `Version` object
*(using the Cargo package version)*
```toml
# Cargo.toml
[package]
name = "..."
version = "1.2.3"
...
```
```rust
use simple_version::{Version, version_from_pkg};
let v: Version<u32> = version_from_pkg!(u32);
println!("{}", v); // 1.2.3
```
---
### 4. Compare between two versions
```rust
use simple_version::Version;
let v1 = Version::<u32>::new(1, 999, 999);
let v2 = Version::<u32>::new(2, 0, 0);
assert!(v1 < v2);
```
---
### 5. Compare between two versions
*(with exceptions)*
```rust
use simple_version::Version;
let v1 = Version::<u32>::new(1, 0, 0).build(1); // v1 has a build number.
let v2 = Version::<u32>::new(1, 0, 0); // v2 does not.
assert!(v1 > v2); // In this case, v1 is greater.
```