use semver::Version;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VersionInfo {
pub version: Version,
#[serde(default)]
pub commit: Option<String>,
#[serde(default)]
pub date: Option<String>,
}
impl VersionInfo {
#[must_use]
pub const fn new(version: Version) -> Self {
Self { version, commit: None, date: None }
}
#[must_use]
pub fn with_commit(mut self, commit: impl Into<String>) -> Self {
self.commit = Some(commit.into());
self
}
#[must_use]
pub fn with_date(mut self, date: impl Into<String>) -> Self {
self.date = Some(date.into());
self
}
#[must_use]
pub fn from_env() -> Self {
let raw = env!("CARGO_PKG_VERSION");
let version = Version::parse(raw).unwrap_or_else(|_| Version::new(0, 0, 0));
Self::new(version)
}
#[must_use]
pub fn is_development(&self) -> bool {
self.version.major == 0 || !self.version.pre.is_empty()
}
}