#[cfg(any(feature = "remote", feature = "mmap", feature = "async"))]
use tensogram_encodings::version::BackendVersion;
#[cfg(any(feature = "remote", feature = "mmap", feature = "async"))]
mod built_info {
include!(concat!(env!("OUT_DIR"), "/built.rs"));
}
#[cfg(any(feature = "remote", feature = "mmap", feature = "async"))]
fn dep_version(crate_name: &str) -> Option<String> {
built_info::DEPENDENCIES
.iter()
.find(|(name, _)| *name == crate_name)
.map(|(_, ver)| ver.to_string())
}
#[cfg(feature = "remote")]
pub fn remote_version() -> BackendVersion {
BackendVersion::pure_rust("object_store", dep_version("object_store"))
}
#[cfg(feature = "mmap")]
pub fn mmap_version() -> BackendVersion {
BackendVersion::pure_rust("memmap2", dep_version("memmap2"))
}
#[cfg(feature = "async")]
pub fn async_version() -> BackendVersion {
BackendVersion::pure_rust("tokio", dep_version("tokio"))
}
#[cfg(test)]
mod tests {
#[cfg(any(feature = "remote", feature = "mmap", feature = "async"))]
use super::*;
#[cfg(any(feature = "remote", feature = "mmap", feature = "async"))]
fn has_digit(s: &str) -> bool {
s.chars().any(|c| c.is_ascii_digit())
}
#[test]
#[cfg(feature = "remote")]
fn remote_version_non_empty() {
let v = remote_version();
let ver = v.version.expect("object_store version should be present");
assert!(!ver.is_empty());
assert!(has_digit(&ver), "object_store version has no digit: {ver}");
}
#[test]
#[cfg(feature = "mmap")]
fn mmap_version_non_empty() {
let v = mmap_version();
let ver = v.version.expect("memmap2 version should be present");
assert!(!ver.is_empty());
assert!(has_digit(&ver), "memmap2 version has no digit: {ver}");
}
#[test]
#[cfg(feature = "async")]
fn async_version_non_empty() {
let v = async_version();
let ver = v.version.expect("tokio version should be present");
assert!(!ver.is_empty());
assert!(has_digit(&ver), "tokio version has no digit: {ver}");
}
}