use super::*;
use serde::Serialize;
use std::sync::OnceLock;
use snarkvm::prelude::ConsensusVersion;
mod built_info {
include!(concat!(env!("OUT_DIR"), "/built.rs"));
}
static VERSION_INFO: OnceLock<VersionInfo> = OnceLock::new();
#[derive(Clone, Debug, Serialize)]
pub struct VersionInfo {
pub version: String,
pub git_commit: String,
pub git_branch: String,
pub latest_consensus_version: u16,
pub consensus_heights: Vec<u32>,
}
impl VersionInfo {
pub fn get<N: Network>() -> &'static VersionInfo {
let latest = ConsensusVersion::latest();
let latest_num: u16 = latest as u16;
let consensus_heights: Vec<u32> = N::CONSENSUS_VERSION_HEIGHTS().iter().map(|(_, height)| *height).collect();
VERSION_INFO.get_or_init(|| VersionInfo {
version: built_info::PKG_VERSION.to_string(),
git_commit: built_info::GIT_COMMIT_HASH.unwrap_or("unknown").to_string(),
git_branch: built_info::GIT_HEAD_REF.unwrap_or("unknown").to_string(),
latest_consensus_version: latest_num,
consensus_heights,
})
}
}