use crate::{FONT_VERSION, GLYPH_ENGINE_VERSION, PROTOCOL_VERSION, PROTOCOL_VERSION_PROTECTED};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct VersionInfo {
pub crate_version: &'static str,
pub protocol: u8,
pub protocol_protected: u8,
pub font: u32,
pub glyph_engine: u32,
pub ffi: bool,
}
pub const fn ffi_enabled() -> bool {
cfg!(feature = "ffi")
}
pub fn crate_version() -> &'static str {
env!("CARGO_PKG_VERSION")
}
pub fn version_info() -> VersionInfo {
VersionInfo {
crate_version: crate_version(),
protocol: PROTOCOL_VERSION,
protocol_protected: PROTOCOL_VERSION_PROTECTED,
font: FONT_VERSION,
glyph_engine: GLYPH_ENGINE_VERSION,
ffi: ffi_enabled(),
}
}
pub fn summary() -> String {
let v = version_info();
format!(
"doldskrift {} (protocol {}, font {}, mge {}, ffi={})",
v.crate_version, v.protocol, v.font, v.glyph_engine, v.ffi
)
}
pub fn version_info_json() -> String {
let v = version_info();
format!(
"{{\n \"crate_version\": \"{}\",\n \"protocol\": {},\n \"protocol_protected\": {},\n \"font\": {},\n \"glyph_engine\": {},\n \"ffi\": {},\n \"honesty\": \"Open/Neural ≠ encryption; Protected AEAD not shipping\"\n}}",
v.crate_version,
v.protocol,
v.protocol_protected,
v.font,
v.glyph_engine,
v.ffi
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn version_info_matches_crate() {
let v = version_info();
assert_eq!(v.crate_version, env!("CARGO_PKG_VERSION"));
assert_eq!(v.protocol, PROTOCOL_VERSION);
assert_eq!(v.font, FONT_VERSION);
assert!(version_info_json().contains("crate_version"));
assert!(summary().contains("doldskrift"));
}
}