use crate::proto::Version;
include!("../gen/version.in");
pub fn version() -> Version {
Version {
major_number: SUBSTRAIT_MAJOR_VERSION,
minor_number: SUBSTRAIT_MINOR_VERSION,
patch_number: SUBSTRAIT_PATCH_VERSION,
git_hash: if SUBSTRAIT_GIT_DEPTH != 0 {
String::from(SUBSTRAIT_GIT_SHA)
} else {
String::default()
},
..Default::default()
}
}
pub fn version_with_producer(producer: impl Into<String>) -> Version {
Version {
producer: producer.into(),
..version()
}
}
#[cfg(feature = "semver")]
pub fn semver() -> semver::Version {
semver::Version {
major: SUBSTRAIT_MAJOR_VERSION as _,
minor: SUBSTRAIT_MINOR_VERSION as _,
patch: SUBSTRAIT_PATCH_VERSION as _,
pre: if SUBSTRAIT_GIT_DEPTH != 0 {
semver::Prerelease::new(&SUBSTRAIT_GIT_DEPTH.to_string()).unwrap()
} else {
semver::Prerelease::EMPTY
},
build: semver::BuildMetadata::new(SUBSTRAIT_GIT_SHA).unwrap(),
}
}
#[cfg(feature = "semver")]
pub fn semver_req() -> semver::VersionReq {
semver::VersionReq::parse(&format!("^{}", semver())).unwrap()
}
#[cfg(test)]
mod tests {
#[test]
fn no_git_hash() {
assert!(super::version().git_hash.is_empty());
}
#[test]
#[allow(clippy::assertions_on_constants)]
fn not_dirty() {
assert!(!super::SUBSTRAIT_GIT_DESCRIBE.contains("dirty"));
assert!(!super::SUBSTRAIT_GIT_DIRTY);
}
#[test]
fn no_pre_release() {
#[cfg(feature = "semver")]
assert!(super::semver().pre.is_empty());
assert_eq!(super::SUBSTRAIT_GIT_DEPTH, 0);
}
}